| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 16779 人关注过本帖, 2 人收藏
标题:编程找出1000之内的全部完数,
只看楼主 加入收藏
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
#include <stdio.h>  
 
main()  
{  
  int i,j,sum=0;
  printf("wanshu:");
  for(i=1;i<=1000;i++)
    {
     for(j=1;j<i;j++)
      {
       if(i%j==0) sum=sum+j;
      }
     if(sum==i) printf(" %d  ",i);
     sum=0;
    }
  getch();
}  
结果为:wanshu: 6   28   496
2009-10-25 14:01
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
6楼正解 短小精悍
11楼也正解
2009-10-25 14:04
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
修改一下,更加简明:
#include<stdio.h>  
 
main()  
{  
  int i,j,sum;
  for(i=1;i<=1000;i++)
    {
     for(sum=0,j=1;j<i;j++)  if(i%j==0) sum+=j;
     if(sum==i) printf(" %d ",i);
    }
  getch();
}  
2009-10-25 14:11
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
数组还没学
2009-10-25 14:32
chiZ
Rank: 2
来 自:paradise
等 级:论坛游民
帖 子:27
专家分:99
注 册:2009-10-25
收藏
得分:1 
回复 7楼 pgy
new compiler can support this!! lao tu!!gaga
2009-10-25 18:50
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
以下是引用chiZ在2009-10-25 18:50:18的发言:

new compiler can support this!! lao tu!!gaga
I did not say he is wrong, but I have not seen before, if you are a trend, does the "MSDN" has a similar standard

我可好玩啦...不信你玩玩^_^
2009-10-25 19:32
mgmt_asp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:124
专家分:158
注 册:2009-7-26
收藏
得分:1 
13楼的有才

不过你们为什么都不除2呢?
任何一个数最大的因子也就是除2后的得数吧?
这样的话这个数的1/2后面的都不是因子也就没必要再算了
2009-10-25 20:09
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 17楼 mgmt_asp
9           

我可好玩啦...不信你玩玩^_^
2009-10-25 20:38
changyilin
Rank: 2
等 级:论坛游民
帖 子:18
专家分:20
注 册:2009-9-4
收藏
得分:1 
7楼代码效率低啊,因子的列出和函数调用重复喽
2009-10-25 21:53
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:1 
在除2后还可以把速度提高一半,就如12除2,能整除,累加2也跟着累加6,6也是12的因子,算到3跟着累加4,只要算到3就停了,往后就不用再做判断。
程序代码:
#include <stdio.h> 
 
int main(void) 
{ 
   int i,j,n,m,s; 
   for(i=2;i<1000;i++) 
     { 
      s=1,m=i/2; 
      for(n=j=2;j<=m;j++) 
    { 
     if(i%j==0) 
       { 
        s+=j; 
        if(n!=m)s+=i/j; 
        m=i/j-1; 
       } 
    } 
      if(s==i)printf("%d ",i); 
     } 
   printf("\n"); 
   return 0; 
} 

努力—前进—变老—退休—入土
2009-10-25 22:44
快速回复:编程找出1000之内的全部完数,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024814 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved