第拾周编制程序题,第6周编制程序练习

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

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

一.分解质因数(4分)

第拾周编制程序题,第6周编制程序练习。难点内容:
各样非素数(合数)都得以写成多少个素数(也可称之为质数)相乘的款式,这多少个素数就都称之为那一个合数的质因数。比如,六得以被分解为二x叁,而二4足以被诠释为二x2x二x3。

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

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

输入格式:
2个整数,范围在[2,100000]美高梅开户网址,内。

出口格式:
形如:
n=axbxcxd

n=n
怀有的记号之间都未曾空格,x是小写字母x。abcd那样的数字肯定是从小到大排列的。

输入样例:
18

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

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

1分解质因数(4分)

标题内容:
每种非素数(合数)都能够写成多少个素数(也可称为质数)相乘的款型,那多少个素数就都叫作这些合数的质因数。比如,陆方可被诠释为贰x叁,而二4方可被诠释为2x2x二x三。
目前,你的次第要读入二个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的正是素数时,输出它自身。

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

出口格式:
形如:
n=axbxcxd

n=n
持有的标记之间都尚未空格,x是小写字母x。

输入样例:
18

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

输入格式:

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

输入格式:

输入在1行中提交三个正整数m和n(壹<m≤n≤一千0),中间以空格分隔。

2.完数(5分)

问题内容:
一个正整数的因子是怀有能够整除它的正整数。而多少个数假若正好等于除它本人外的因子之和,那些数就称为完数。例如陆=一+2+三(陆的因数是1,二,三)。

如今,你要写多个顺序,读入八个正整数n和m(壹<=n<m<一千),输出[n,m]限制内有着的完数。

提醒:能够写一个函数来判定有个别数是不是是完数。

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

出口格式:
里头全部的完数,以空格分隔,最后三个数字前面未有空格。假如未有,则输出1行文字:
NIL
(输出NIL多少个大写字母加回车)。

输入样例:
1 10

输出样例:
6
时限:500ms内部存款和储蓄器限制:32000kb

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

输出格式:

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

输出格式:

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

2完数(5分)

标题内容:
贰个正整数的因数是兼备能够整除它的正整数。而一个数就算恰巧等于除它自个儿外的因子之和,这一个数就叫做完数。例如陆=一+贰+三(陆的因子是一,二,三)。
明日,你要写二个先后,读入五个正整数n和m(1<=n<m<一千),输出[n,m]限定内有着的完数。
唤醒:能够写七个函数来判断有个别数是或不是是完数。

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

出口格式:
个中全部的完数,以空格分隔,最后二个数字前边未有空格。要是未有,则输出2个空行。

输入样例:
1 10

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

输入样例:

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地图