问题描述
220的真因数之和为1+2+4+5+10+11+20+22+44+55+110=284284的真因数之和为1+2+4+71+142=220毕达拉哥斯把这样的数对A,B称为相亲数;A的真因数之和为B,而B的真因数之和为A,求3000位以内的相亲数用JAVA语言编写 问题补充:jjjssh 写道
解决方案
引用Exception in thread "main" java.lang.ArithmeticException: / by zero 这是0除数错误,呵呵,写得心急,没注意。public class Test2 {/** * @param args */public static void main(String[] args) { for(int i=1 ;i<3000;i++){ IsMarrayNum(i); }}public static void IsMarrayNum(int num){ int sum=0;for(int i =1;i<num;i++){ if(num%i==0) sum+=i;} int sum2=0;for(int j=1;j<sum;j++){ if(sum%j==0) sum2+=j;} if(sum2==num){//是相亲数那就用一个对象存起来 System.out.println("相亲数对:"+num+", "+sum); } } }
解决方案二:
(6,6)(28,28),(496,469),你可以多加个if语句就可以去掉,至于重复的,你可以用一个数组把他们放进去,就可以避免了
解决方案三:
public static void IsMarrayNum(int num){ int sum=0;for(int i =0;i<num;i++){ if(num%i==0) sum+=i;} int sum2=0; for(int j=0;j<sum;j++){ if(sum%j==0) sum2+=j;} if(sum2==num) //是相亲数那就用一个对象存起来}public static void main(String args[]){ for(int i=0 ;i<3000;i++){ IsMarrayNum(i); }}感觉效率不高,呵呵