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