题目23:算出所有不能写成两个过剩数之和的正整数之和。
如果一个数的所有真因子之和等于这个数,那么这个数被称为完全数。例如,28的所有真因子之和为1 + 2 + 4 + 7 + 14 = 28,所以20是一个完全数。
如果一个数的所有真因子之和小于这个数,称其为不足数,如果大于这个数,称其为过剩数。
12是最小的过剩数,1 + 2 + 3 + 4 + 6 = 16。因此最小的能够写成两个过剩数之和的数字是24。经过分析,可以证明所有大于28123的数字都可以被写成两个过剩数之和。但是这个上界并不能被进一步缩小,即使我们知道最大的不能表示为两个过剩数之和的数字要比这个上界小。
找出所有不能表示为两个过剩数之和的正整数之和。
12是最小的过剩数,1 + 2 + 3 + 4 + 6 = 16。因此最小的能够写成两个过剩数之和的数字是24。经过分析,可以证明所有大于28123的数字都可以被写成两个过剩数之和。但是这个上界并不能被进一步缩小,即使我们知道最大的不能表示为两个过剩数之和的数字要比这个上界小。
找出所有不能表示为两个过剩数之和的正整数之和。
问题解决方案:
public class num23 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(sum(28124));
}
public static boolean method(int n){
//Double i=0.0;
//i=Math.sqrt(n);
int sum=0;
for(int j=1;j<n;j++){
if(n%j==0){
sum+=j;
}
}
if(n<sum){
return true;
}else
return false;
}
public static int sum(int n){
int sum=0,j;
int temp=0;
for(int i=1;i<n;i++){
if(i<24){
sum+=i;
}else if(i%12==0){
}else{
for(j=12;j<i-12;j++){
temp=i-j;
if(method(temp)&&method(j)){
System.out.println(i+"可以的");
break;
}
}
if(j==i-12)
sum+=i;
}
}
return sum;
}
//答案:4179871
}
问题答案:4179871