问题描述
220的真因数之和为1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为1+2+4+71+142=220
真因数是除了自身之外的约数
毕达拉哥斯把这样的数对A, B称为相亲数;A的真因数之和为B,B的真因数之和为A 。求100000以内的相亲数;
public class Main {
private static int getSum(int num){ //计算真因数之和
int limit = (int)Math.sqrt(num); //确定范围
int sum = 1;
for(int i=2 ; i<=limit ; i++){
if(num%i==0){
sum += i+num/i; //如果余数为0 则sum加本身这个除数和num/这个除数的商
}
}
return sum;
}
public static void Run(int a,int b){ //在a到b范围的相亲数
int times = 0; //计数
for(int i=a ; i<=b ; i++){
int sum1 = getSum(i);
int sum2 = getSum(sum1);
if(sum2 == i && i<sum1){ //判断sum1和i是不是相亲数 ,i<sum1是为了避免重复
System.out.println(sum1+" "+sum2);
times++;
}
}
System.out.println("一共有"+times+"对相亲数");
}
public static void main(String[] args) {
Run(2,100000);
}
}