c语言编程求完数的方法,求一完数算法

我重新换了一种算法

这种方法 大概能在16秒左右把40000000之内的 完数扫描出来

#include

int iswanshu(int n)

{

int i,j,count ;

i=count=0 ;

j=n ;

while(i!=1)

{

i=n/2 ;

if(n%2!=0)

i++;

if(j%i!=0)

{

return 0 ;

}

if((i%2)!=0&&i>1)

count++;

n=i ;

}

if(count>0)

{

return 1;

}else{

return 0;

}

}

int checkagain(int n)

{

int i,sum ;

sum=0 ;

for(i=1;i

{

if(n%i==0)

sum=sum+i ;

}

if(sum==n){

return 1 ;

}else{

return 0 ;

}

}

printwanshu(int n)

{

int i ;

i=0 ;

printf("%d its factors are ",n);

while(i!=1)

{

i=n/2 ;

if(n%2!=0)

i++;

printf("%d,",i);

n=i ;

}

printf("\n");

}

main()

{

int i,n ;

while(1)

{

printf("本程序将实现输出1-n之间的完数,n>=1\n现在请输入n:");

scanf("%d",&n);

printf("你输入的数是%d\n",n);

if(n>=1)

break ;

}

for(i=1;i<=n;i++)

{

if(iswanshu(i)==1&&checkagain(i)==1)

printwanshu(i);

}

}

-----------------------------

我输入n=40000000时 大概16左右出了结果如下

6 its factors are 3,2,1,

28 its factors are 14,7,4,2,1,

496 its factors are 248,124,62,31,16,8,4,2,1,

8128 its factors are 4064,2032,1016,508,254,127,64,32,16,8,4,2,1,

33550336 its factors are 16775168,8387584,4193792,2096896,1048448,524224,262112,

131056,65528,32764,16382,8191,4096,2048,1024,512,256,128,64,32,16,8,4,2,1,

[[it] 本帖最后由 gzbao9999 于 2008-11-5 15:18 编辑 [/it]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值