1.问题:两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
2.思路:通过函数求出每个数的因子之和并判断,然后穷举1到3000的数即可。
3.程序流程图:
4.代码实现:
#include<iostream>
using namespace std;
int fact(int x,int y)
{
int k=0;
int q=0;
for(int i=1;i<=x/2;i++){
if(x%i==0)
k=k+i;
}
for(int i=1;i<=y/2;i++){
if(y%i==0)
q=q+i;
}
if(k==y&&q==x)
return 1;
else
return 0;
}
int main()
{
int count=0;
for(int i=1;i<=3000;i++){
for(int j=1;j<=3000;j++){
if(fact(i,j)&&i<j)
{
cout<<i<<"和"<<j<<"是一对亲密数"<<endl;
count++;
}
}
}
cout<<"总计有"<<count<<"对亲密数"<<endl;
return 0;
}