问题描述
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);}
}