首先问,亲密数是什么
简言之,某个数的公因数之和的公因数之和就是它本身(好像有一点拗口)。
那么接下来就是根据这一点来判断就ok了。
#include<stdio.h>
#include<math.h>
int main()
{
int a=2;
for (; a<=3000; a++)//从1循环到3000
{
int sum = 0,i=1,b=1,c=0;//定义每一轮初各个变量不变
for (; i < a; i++)//找a的公因数i //这里可以改成i<a/2
{
if (a % i == 0)//判断每个i是否为a的公因数 // 得到了a的公因数之和sum
{
sum += i;//是的话,每个i加起来得到sum //
}
else
{
continue;
}
} //
//再求sum的公因数之和
for (; b < sum; b++)//找sum的公因数b //这里可以改成b<sum/2
{
if (sum % b == 0)//判断每个数是否为sum的公因数 // 得到了sum的公因数之和c
{
c += b;//是的话,每个b加起来得到c //
}
else
{
continue;
}
}
//现在要判断该sum(a的公因数之和)是否与a构成亲密数
if (a==c && a<sum)//如果是,则说明a与c是亲密数
{
printf("%d的亲密数是%d\n", a, sum);
}
else
{
continue;//继续判断下一个a
}
}
return 0;
}
初版代码,后面看了下csdn大家的代码发现可以注意一个地方。
那就是任一数的公因数必小于等于它本身。
所以可以改成i<a/2和b<sum/2
不足
1.学的太少,应该还有更好的方法。
2.变量名字取得太随意了。