用JAVA语言编写“求相亲数”

2019-03-25 13:46|来源: 网路

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语言编写

问题补充:
jjjssh 写道
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);
  }
}

感觉效率不高,呵呵



本人是个初学者,请问下如何把这两个数打印出来呢?我打印的时候
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at testlove.IsMarrayNum(testlove.java:11)
        at testlove.main(testlove.java:4)

问题补充:
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
相亲数是:220和284
相亲数是:284和220
相亲数是:496和496
相亲数是:1184和1210
相亲数是:1210和1184
相亲数是:2620和2924
相亲数是:2924和2620
最终的运行结果是这样的,但是(6,6)(28,28),(496,469)是不属于相亲数的。。而且出现了重复的问题

相关问答

更多