c语言pta 找完数问题

c语言pta 找完数问题,第1张

完数又称为完全数,而完全数是非常稀少的,所以没有必要求两数之间的完全数,下面的程序是找出输入数以内的所有完全数。可以看到:从10000到100000之间是没有完全数的,而实际上8128的下一个完全数在输入300000后仍然没有找到,但等待的时间过长(至少有几分钟)。

#include<stdio.h>

#include <limits.h>

int main(void)

{

unsigned long long i,j,srs,hj,ys[1000]

int k

printf("  这是一个找出输入的数以内所有完全数的程序\n")

printf("  当输入数大于 100000 时,计算量较大,需等待较长时间\n\n")

printf("  请输入一个大于 3 的正整数:")

while(scanf("%llu",&srs) == 1)

{

while(getchar() != '\n')

continue

if(srs<4)

{

printf("  输入错误!请重新输入:")

continue

}

printf("  %llu 以内的完全数如下:\n",srs)

for(i=4i<srs+1i++)

{

hj=0

k=0

for(j=2j<i/2+1j++)

if(!(i%j))

{

ys[k]=j

k++

}

if(k)

{

for(j=0j<kj++)

hj+=ys[j]

if(i==hj+1)

printf("  %10llu 共计有 %2d 个因数\n",i,k+2)

}

}

printf("\n  请输入一个大于 3 的正整数:")

}

return 0

}

首先很高兴为您解答,找完数所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。输入格式:输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。输出格式:逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。希望可以帮助您

1、解题思路:所谓完数是一些特殊的自然数。如果一个数恰好等于它的因子之和,则称该数为“完全数”。先定义一个函数用于判断一个数是否是完数,接着依次从2到5000依次循环判断。

2、参考代码:

#include <stdio.h>

int fun(int n){//判断n是否是完数 

    int i,sum=0

    for(i=1i<ni++)

        if(n%i==0) sum+=i

    if(sum==i) return 1

    return 0

int main ()

{

    int i

    for(i=2i<5000i++)

        if(fun(i))

            printf("%d ",i)

    return 0 

}

3、运行结果:6 28 496


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12062367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存