用JAVA语言编写“求相亲数”
问题描述:
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,求3000位以内的相亲数
用JAVA语言编写
答
[quote]Exception in thread "main" java.lang.ArithmeticException: / by zero [/quote]
这是0除数错误,呵呵,写得心急,没注意。
[code="java"]
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);
}
}
}
[/code]
答
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);
}
}
感觉效率不高,呵呵
答
(6,6)(28,28),(496,469),你可以多加个if语句就可以去掉,至于重复的,你可以用一个数组把他们放进去,就可以避免了