第玖周编制程序题,第六周编制程序练习

所谓完数正是该数恰好等于除本身外的因子之和。例如:6=一+二+三,在那之中1、2、三为陆的因数。本题供给编写程序,找出任意两正整数m和n之间的有着完数。

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

1.分解质因数(五分)

难点内容:
各类非素数(合数)都得以写成多少个素数(也可称之为质数)相乘的方式,那些素数就都称为这几个合数的质因数。比如,六方可被诠释为二x三,而二四能够被解释为二x二x二x3。

近期,你的次第要读入二个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的正是素数时,输出它本人。

晋升:能够用三个函数来判定某数是还是不是是素数。

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

输出格式:
形如:
n=axbxcxd
第玖周编制程序题,第六周编制程序练习。或
n=n
享有的号子之间都不曾空格,x是小写字母x。abcd那样的数字肯定是从小到大排列的。

输入样例:
18

输出样例:
18=2x3x3
岁月限制:500ms内部存款和储蓄器限制:32000kb

#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;
}

壹分解质因数(四分)

标题内容:
各类非素数(合数)都得以写成几个素数(也可称为质数)相乘的款式,这多少个素数就都称呼那些合数的质因数。比如,陆能够被解释为二x3,而贰四得以被演说为贰x贰x2x叁。
明天,你的程序要读入一个[2,100000]界定内的平头,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

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

输出格式:
形如:
n=axbxcxd

n=n
抱有的记号之间都未曾空格,x是小写字母x。

输入样例:
18

输出样例:
18=2x3x3
日子范围:500ms内部存款和储蓄器限制:3两千kb

输入格式:

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

输入格式:

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

2.完数(5分)

标题内容:
亚洲必赢官网,一个正整数的因子是兼具可以整除它的正整数。而叁个数借使刚好等于除它自个儿外的因子之和,那些数就称为完数。例如陆=一+二+3(陆的因数是1,二,3)。

当今,你要写3个先后,读入多个正整数n和m(一<=n<m<一千),输出[n,m]限定内全体的完数。

提醒:能够写两个函数来判断某些数是或不是是完数。

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

出口格式:
中间全数的完数,以空格分隔,最后七个数字后边未有空格。倘若没有,则输出一行文字:
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++;
                }               
            }
        }
    }
}

出口格式:

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

出口格式:

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

2完数(5分)

标题内容:
一个正整数的因子是怀有能够整除它的正整数。而两个数假如恰巧等于除它自己外的因子之和,这么些数就称为完数。例如陆=1+2+三(6的因数是1,二,3)。
前日,你要写一个顺序,读入八个正整数n和m(1<=n<m<一千),输出[n,m]限制内有着的完数。
提示:能够写3个函数来判断有个别数是不是是完数。

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

出口格式:
内部全体的完数,以空格分隔,最终1个数字背后未有空格。假使未有,则输出1个空行。

输入样例:
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地图