11问答网
所有问题
C语言求互满数
如果有两个数,每一个数它的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出 30000 以内所有的互满数, 并显示输出,求 一个数它的所有约数(除了它本身以外)的和用函数实现!
举报该问题
推荐答案 2008-06-12
1楼写的那个函数不是计算一个数约数之后,而是计算不是约数之和的,不要混淆了;
有个解法,不过很耗时(相当耗时)
//环境: VC6.0; 运行平台: XPSP2
#include <iostream>
using namespace std;
int main()
{
int ysSum(int x);
for(int i=1;i<=30000;i++)
for(int j=i;j<=30000;j++)
{
if( ( ysSum(i)!=j ) || ( ysSum(j)!=i ))
continue;
else
cout<<i<<" "<<j<<endl;
}
return 0;
}
int ysSum(int x) //计算一个数的约数和
{
int sum=0;
for(int i=1;i<x;i++)
{
if(x%i==0) sum+=i;
}
return sum;
}
这个程序估计20分钟也算不完;
也有效率更好的算法:
#include <iostream>
using namespace std;
int main()
{
int ysSum(int x);
int temp;
for(int i=1;i<=30000;i++)
{
temp=ysSum(i); //计算i的约数和
if(temp>30000) //temp不能大于30000
continue;
if(ysSum(temp)==i) //如果temp的约数和等于i,
// 则是我们要的
cout<<i<<" "<<temp<<endl;
}
return 0;
}
int ysSum(int x)
{
int sum=0;
for(int i=1;i<x;i++)
{
if(x%i==0) sum+=i;
}
return sum;
}
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://11.wendadaohang.com/zd/2v2M7MvP.html
其他回答
第1个回答 2008-06-11
long sum(long a)
{
long i,sum=0;
for(i=1;i<a;i++)
if(a%i)sum+=i;
}本回答被提问者采纳
相似回答
(急急,救命啊!
c语言
)如果有两个数,每一个数的所有约数的和正好等于对...
答:
include<stdio.h>int appsum(int x){int i,s=0;for(i=1;i<x;i++)if(x%i==0) s+=i;return s;}void main(){int i,j;for(i=1;i<30000;i++){j=appsum(i);if(j>i&&appsum(j)==i)printf("%d %d\n",i,j);}}/*答案:220 2841184 12102620 29245020 55646232 636810744 ...
大家正在搜
c语言中求几个数中的最大数
求三个数中的最大数c语言
求1!+2!…+10!用c语言求
c语言求两个数的和
c语言求完数
用c语言求1到1000的同构数
c语言是什么语言
C语言求和
c语言求1到100的和
相关问题
c语言编程求10000以内的所有互满数
c语言中求完备数和互满数
简单c语言编程
用c语言输出10000以内的同构数
求教打印出10000以内的所有自守数的编程代码如何编写,大神...
高手帮我改下c语言
C语言编程
后天考试 ,求改一个C程序