我们学校的程序设计题,完数,高手给个算法

ch_lol 2005-03-20 05:48:22
完数指的是自身等于其各因子(因子包括1,不包括自身)和的自然数
如1*2*3=6,1+2+3=6,所以6是完数。
要求:找出10000内的所有完数,求他们的最大公约数和乘积。

多谢了
...全文
385 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hermanpc 2005-03-20
  • 打赏
  • 举报
回复
#include <iostream.h>

void main()
{

int i,j;

for(i=1;i<=1000;i++)
{
int sum=0;

for(j=1;j<i;j++)
{
float z=i%j;
if(z==0)
sum=sum+j;
}

if(sum==i)
cout<<i<<'\t';

}
}
feixiaofo 2005-03-20
  • 打赏
  • 举报
回复
求他们的最大公约数和乘积?没看明白是什么意思?只求10000内的完数。
void main()
{
int m,s,i;
for (m=2;m<10000;m++)
{
s=0;
for(i=1;i<m;i++)
{
if((m%i)==0)
s=s+i;
}
if (s==m)
printf("%d\t",m);
}
}
在vc6.0上运行成功。
DiyerYang 2005-03-20
  • 打赏
  • 举报
回复
斗胆问一下把数进行素分解有什么好方法么?
shine51151 2005-03-20
  • 打赏
  • 举报
回复
程序你要需要的话我给你附上
shine51151 2005-03-20
  • 打赏
  • 举报
回复
数论里有个公式:

若正整数 n = p1^a1 * p2^a2 * …… * pk^ak (n的标准分解式)
( 其中 pi 表示 n 的素因子,^是方幂的符号,ai 表示与 pi 对应的方幂, i=1,2,……k )
( 例如: 6 = 2^1 * 3^1 )

则有下列等式成立:
s(n) = (p1^(a1+1)-1)/(p1-1) * (p2^(a2+1)-1)/(p2-1) * …… * (pk^(ak+1)-1)/(pk-1)
(其中s(n)表示n的所有因子之和,包括1也包括n自身)
( 例如:s(6) = (2^(1+1)-1)/(2-1) * (3^(1+1)-1)/(3-1) = 12 )

因此我们可以利用这个等式来设计一个算法:
1、对 [1,10000] 这个闭区间内的正整数n作标准素分解
2、由上面的等式计算出 n 的所有因子和 s(n)
3、表较 s(n) 和 n 的值 if( s(n)== 2*n ) 输出n为完数(2倍的 n 是因为s(n)求和时已经包含了n本身)
4、求 [1,10000] 中所有完数的最大公约数和乘积。

zengwujun 2005-03-20
  • 打赏
  • 举报
回复
超级简单,居然还不自己做。
yuchengliu 2005-03-20
  • 打赏
  • 举报
回复
同意,不然怎么进步!
楚牛9 2005-03-20
  • 打赏
  • 举报
回复
楼主这边的版主好像不太欢迎作业帖。
wuzhihong 2005-03-20
  • 打赏
  • 举报
回复
这个问题好像以前有人问过了。
算法这种东西最好自己多花点时间去想出来,这样才会有提高。
还有告诉楼主这边的版主好像不太欢迎作业帖。
hermanpc 2005-03-20
  • 打赏
  • 举报
回复
哈哈,这道完全数我很久前曾经写过,不过现在忘记了!!哈哈

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧