时间限制: 1Sec 内存限制: 128MB
题目描述:(原题链接)
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
输入:
无
样例输入:
无
输出:
3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号) 一对亲密数只输出一次, 小的在前
样例输出 :
无
解题思路:
对获得的数m进行其真因子求和得到n,然后判断n的真因子和m1是否等于原数m
注意事项:
需要在输出时,添加判断条件m<n,否则会出现重复对及相等数对
参考代码:
public class P1122 {
public static void main(String[] args) {
for(int i=100;i<=3000;i++) {
int tmp1=0,tmp2=0; //暂存i的真因子和及tmp1的真因子和
for(int j=1;j<i;j++) {
if(i%j==0)
tmp1 =tmp1+j;
}
for(int j=1;j<tmp1;j++) {
if(tmp1%j==0)
tmp2=tmp2+j;
}
if(tmp2==i&&i<tmp1) { //如果i的真因子和的真因子和等于i,且i<tmp1则输出
System.out.print("("+i+","+tmp1+")");
}
}
}
}