所谓完数正是该数恰好等于除自身外的因子之和。例如:陆=一+二+叁,个中一、二、三为陆的因子。本题须求编写程序,找出任意两正整数m和n之间的享有完数。

所谓完数正是该数恰好等于除本人外的因子之和。例如:陆=一+二+三,个中一、二、三为陆的因子。本题要求编写程序,找出自由两正整数m和n之间的拥有完数。

1.分解质因数(5分)

标题内容:
每一个非素数(合数)都足以写成几个素数(也可称之为质数)相乘的样式,那多少个素数就都称为那几个合数的质因数。比如,陆足以被诠释为2x三,而二四方可被诠释为2x二x二x叁。

今昔,你的程序要读入贰个[2,100000]限定内的平头,然后输出它的质因数分解式;当读到的正是素数时,输出它本人。

唤醒:能够用二个函数来判定某数是或不是是素数。

输入格式:
叁个整数,范围在[2,100000]内。

输出格式:
形如:
n=axbxcxd

n=n
持有的标志之间都没有空格,x是小写字母x。abcd那样的数字肯定是从小到大排列的。

输入样例:
18

出口样例:
18=2x3x3
岁月范围:500ms内部存储器限制:3三千kb

#include <stdio.h>

int main(int argc, char **argv) {
    int n;
    scanf("%d",&n);
    printf("%d=",n);
    for(int i=2;i<=n;++i){
        if(n%i==0){
            n/=i;
            if(n!=1){
                printf("%dx",i);
                i--;
            }
            else{
                printf("%d",i);
                break;
            }

        }
    }    
    return 0;
}

第8周编制程序题,第5周编制程序演练。1分解质因数(5分)

题材内容:
各类非素数(合数)都得以写成多少个素数(也可称之为质数)相乘的样式,那多少个素数就都叫作那个合数的质因数。比如,陆得以被演说为二x叁,而二4足以被分解为二x2x2x三。
后天,你的次第要读入1个[2,100000]界定内的平头,然后输出它的质因数分解式;当读到的就是素数时,输出它自个儿。

输入格式:
二个整数,范围在[2,100000]内。

输出格式:
形如:
n=axbxcxd
金沙注册送58 ,或
n=n
拥有的符号之间都未曾空格,x是小写字母x。

输入样例:
18

出口样例:
18=2x3x3
岁月范围:500ms内部存款和储蓄器限制:3三千kb

输入格式:

输入在1行中付出2个正整数m和n(一<m≤n≤10000),中间以空格分隔。

输入格式:

输入在一行中付出二个正整数m和n(一<m≤n≤一千0),中间以空格分隔。

2.完数(5分)

题材内容:
一个正整数的因子是负有能够整除它的正整数。而3个数固然正好等于除它本人外的因子之和,那几个数就称为完数。例如陆=一+二+叁(六的因数是1,二,三)。

方今,你要写一个程序,读入四个正整数n和m(1<=n<m<1000),输出[n,m]界定内部存款和储蓄器有的完数。

提醒:能够写2个函数来判断有个别数是或不是是完数。

输入格式:
三个正整数,以空格分隔。

出口格式:
个中所有的完数,以空格分隔,最终八个数字前面未有空格。假设未有,则输出1行文字:
NIL
(输出NIL八个大写字母加回车)。

输入样例:
1 10

出口样例:
6
光阴限制:500ms内部存款和储蓄器限制:3三千kb

#include <stdio.h>

int IsWanshu(int n){
    int sum=0;
    for(int i=1;i<n;i++){
        if(n%i==0){
            sum+=i;
        }
    }
    if(sum==n){
        return 1;
    }
    else{
        return 0;
    }
}

int main(int argc, char **argv) {
    int n,m;
    int count=0;
    scanf("%d%d",&n,&m);
    for(int i=n;i<=m;++i){
        if(IsWanshu(i)==1){
            if(count==0){//最后一个不好判断,第一个好判断
                printf("%d",i);
                count++;
            }
            else{
                printf(" %d",i);
                count++;
            }
        }
    }
    if(count==0){
        printf("NIL");
    }
    return 0;
}

自己的答案:

package hello;

import java.util.Scanner;

public class Main {
    public static boolean isPrime(int k)
    {
        boolean isPrime = true;
        if (k==2||k==3)
        {
            return true;
        }
        if (k%2 == 0)
        {
            return false;
        }
        for (int i=3;i<=Math.sqrt(k);i+=2)
        {
            if (k%i==0)
            {
                isPrime=false;
                break;
            }
        }
        return isPrime;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); 
        int number = in.nextInt();
        System.out.print(number+"=");
        int j=2;
        if (isPrime(number))
        {
            System.out.print(number);
        }
        else
        {
            while (number>1)
            {
                if (number%j==0)
                {
                    System.out.print(j+"x");
                    if (isPrime(number/j))
                    {
                        System.out.print(number/j);
                        break;
                    }
                    else
                    {
                        number = number/j;
                    }
                }
                else
                {
                    j++;
                }               
            }
        }
    }
}

输出格式:

逐行输出给定范围内种种完数的因数累加方式的分解式,每种完数占1行,格式为“完数
= 因子1 + 因子二 + … +
因子k”,在那之中完数和因子均按递增顺序给出。若区间内并未有完数,则输出“None”。

输出格式:

逐行输出给定范围内种种完数的因数累加情势的分解式,每种完数占一行,格式为“完数
= 因子一 + 因子贰 + … +
因子k”,当中完数和因子均按递增顺序给出。若区间内并未有完数,则输出“None”。

2完数(5分)

难点内容:
一个正整数的因子是颇具能够整除它的正整数。而1个数即使正好等于除它自个儿外的因子之和,这么些数就叫做完数。例如陆=1+二+三(六的因数是1,二,3)。
于今,你要写贰个程序,读入三个正整数n和m(一<=n<m<一千),输出[n,m]界定内部存款和储蓄器有的完数。
提示:能够写二个函数来判断有个别数是还是不是是完数。

输入格式:
三个正整数,以空格分隔。

出口格式:
个中全数的完数,以空格分隔,最后2个数字前边没有空格。假若未有,则输出八个空行。

输入样例:
1 10

出口样例:
6
日子范围:500ms内存限制:33000kb

输入样例:

2 30

输入样例:

2 30

自己的答案:

package hello;

import java.util.Scanner;

public class Main {
    public static boolean iswan(int k)
    {
        boolean iswan = false;
        int sum = 0;
        for (int i=1;i<=k/2;i++)
        {
            if (k%i==0)
            {
                sum += i;
            }
        }
        if (sum == k)
        {
            iswan = true;
        }
        return iswan;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); 
        int n = in.nextInt();
        int m = in.nextInt();
        int count = 0;
        for (int i =n; i<=m; i++)
        {
            if (iswan(i))
            {
                count++;
                if (count == 1)
                {
                    System.out.print(i);
                }
                else
                {
                    System.out.print(" "+i);
                }               
            }
        }
        if (count == 0)
        {
            System.out.println();
        }
    }
}

输出样例:

6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

 

 1 #include <stdio.h>
 2 
 3 int isPerfect(int num);
 4 void output(int num);
 5 
 6 int main(int argc, char const *argv[])
 7 {
 8     int m, n;
 9     int i;
10     int count = 0;
11 
12     scanf("%d %d", &m, &n);
13 
14     for ( i = m; i <= n; i++ ) {
15         int num = i;
16         if ( isPerfect( num ) ) {
17             count++;
18             output(num);
19         }
20     }
21     if ( count == 0 ) {
22         printf("None\n");
23     }
24     return 0;
25 }
26 
27 int isPerfect(int num)
28 {
29     int nSum = 0;
30     int ret = 0;
31     for ( int i = 1; i < num; i++ ) {
32         if ( num % i == 0 ) {
33             nSum += i;
34         }
35         // 判断一个数是不是完数 要把它所有的因子都加起来
36         if ( nSum == num && i + 1 == num) {
37             ret = 1;
38         }
39     }
40     return ret;
41 }
42 
43 void output(int num)
44 {
45     int nSum = 0;
46     printf("%d = ", num);
47     for ( int i = 1; i < num; i++ ) {
48         if ( num % i == 0 ) {
49             nSum += i;
50             printf("%d", i);
51             if ( nSum == num ) {
52                 break;
53             } else {
54                 printf(" + ");
55             }
56         }
57     }
58     printf("\n");
59 }

 

输出样例:

6 = 1 + 2 + 328 = 1 + 2 + 4 + 7 + 14

 1 #include <stdio.h> 2  3 int isPerfect(int num); 4 void output(int num); 5  6 int main(int argc, char const *argv[]) 7 { 8     int m, n; 9     int i;10     int count = 0;11 12     scanf("%d %d", &m, &n);13 14     for ( i = m; i <= n; i++ ) {15         int num = i;16         if ( isPerfect {17             count++;18             output;19         }20     }21     if ( count == 0 ) {22         printf("None\n");23     }24     return 0;25 }26 27 int isPerfect(int num)28 {29     int nSum = 0;30     int ret = 0;31     for ( int i = 1; i < num; i++ ) {32         if ( num % i == 0 ) {33             nSum += i;34         }35         // 判断一个数是不是完数 要把它所有的因子都加起来36         if ( nSum == num && i + 1 == num) {37             ret = 1;38         }39     }40     return ret;41 }42 43 void output(int num)44 {45     int nSum = 0;46     printf("%d = ", num);47     for ( int i = 1; i < num; i++ ) {48         if ( num % i == 0 ) {49             nSum += i;50             printf("%d", i);51             if ( nSum == num ) {52                 break;53             } else {54                 printf(" + ");55             }56         }57     }58     printf("\n");59 }

相关文章

网站地图xml地图