c语言 完全数 最快算法

来源:百度知道 编辑:UC知道 时间:2024/07/12 04:48:47
我自己写了一个:
#include<stdio.h>
void main()
{long i,j,s,m,n;
scanf("%ld",&n);
if(n>5)
for(i=1;i<=n;i++)
{
m=i/2;
for(j=1,s=0;j<=m;j++)
if(i%j==0)s+=j;
if(s==i)printf("%ld\n",i);
}
}
但是速度超慢,我要的是一个很快的程序,快到可以把20亿(long的上限)以下的完全数都找出来

20亿内的完全数也就6个,,,,,可以先找梅森素数(即,如果(2^p-1)是素数,那么它就是梅森素数),再根据用(2^p-1)2^(p-1),这个就是完全数。
如果楼主非要用自己那方法找,还是可以优化下的,不过提高得不多,
一个办法就是在
if(i%j==0)s+=j;
if(s==i)printf("%ld\n",i);
之间加入一句。if(s>i) break;

不是因为速度慢,而是你用了printf,这个函数属于打印函数,肯定会慢。
你要检验速度就先把所有数都储存在一个数组里,等循环完了再一起输出。