计算亲密数对
题目是这样子的:计算亲密数对,若a,b为1对亲密数,则a的因子和等于b,b的因子和等于a, 且a不等于b。 如220、284是1对亲密数, 284,220也是1对亲密数。程序要求在6至5000内找出所有的亲密数对,并对每对亲密数用格式"%6d,%6d\n"输出。
答案给的代码是这样子的:
#include<stdio.h>
int main()
{
int a,b,c,k;
for(a=6;a<=5000;a++)
{
for(k=1,b=0;k<=a/2;k++)
if(a%k==0) b+=k;
for(k=1,c=0;k<=b/2;k++)
if(b%k==0) c+=k;
if(a==c&&a!=b)
printf("%6d,%6d\n",a,b);
}
return 0;
}
老实说,那个b和c可以从5开始嘛,从0开始会不会不太好{:10_299:} 沙发! aaron.yang 发表于 2020-5-8 21:34
沙发!
? {:10_259:} 本帖最后由 skyddy 于 2020-5-24 19:06 编辑
不能为5吧 b和c表示因子的和 每次大循环因子的和要置为0 重新计算的
我写的烂方法
int a, b;
int divide;
int sum;
for (a = 6; a <= 5000; ++a) {
sum = 0;
for (int j = 1; j <= sqrt(a); ++j) {
if (a % j == 0) {
if (j != 1) {
divide = a / j;
} else {
divide = 0;
}
sum += (j + divide);
}
}
b = sum;
sum = 0;
for (int k = 1; k <= sqrt(b); ++k) {
if (b % k == 0) {
if (k != 1) {
divide = b / k;
} else {
divide = 0;
}
sum += (k + divide);
}
}
if (sum == a && a != b) {
printf("%6d,%6d\n", a, b);
}
}
return 0; skyddy 发表于 2020-5-10 12:28
不能为5吧 b和c表示因子的和 每次大次循环因子的和要置为0 重新计算的
我写的烂方法
有道理{:10_272:}
页:
[1]