Java 丰富的总数、逻辑
我一直在研究下面的问题,但我得到了错误的答案。我的逻辑有什么问题 一个完全数是一个数,它的适当因子之和正好等于这个数。例如,28的适当除数之和为1+2+4+7+14=28,这意味着28是一个完全数 如果一个数n的真因子之和小于n,则称其为亏数;如果该和大于n,则称其为丰数 因为12是最小的富足数,1+2+3+4+6=16,所以可以写成两个富足数之和的最小数是24。通过数学分析,可以证明所有大于28123的整数都可以写成两个富足数之和。然而,通过分析无法进一步降低该上限,即使已知不能表示为两个丰富数之和的最大数小于该上限 求所有不能写成两个富足数之和的正整数之和 这是我的密码:Java 丰富的总数、逻辑,java,arrays,perfect-numbers,Java,Arrays,Perfect Numbers,我一直在研究下面的问题,但我得到了错误的答案。我的逻辑有什么问题 一个完全数是一个数,它的适当因子之和正好等于这个数。例如,28的适当除数之和为1+2+4+7+14=28,这意味着28是一个完全数 如果一个数n的真因子之和小于n,则称其为亏数;如果该和大于n,则称其为丰数 因为12是最小的富足数,1+2+3+4+6=16,所以可以写成两个富足数之和的最小数是24。通过数学分析,可以证明所有大于28123的整数都可以写成两个富足数之和。然而,通过分析无法进一步降低该上限,即使已知不能表示为两个丰富
public class EulerProblem23 {
public static void main(String[] args) {
//First, I create an array containing all the numbers ranging from 1 to 28123.
int[] tall = new int[28123];
int x = 0;
for (int j = 1;j<=28123;j++){
tall[x] = j;
x++;
}
//Then, give all the numbers that can be written as the sum of two abundant numbers
//the value 0.
int forrige = 0;
for (int i = 1;i<=28123;i++){
if (isAbundant(i)){
if (2 * i <= 28123){
tall[i - 1] = 0;
}
if (forrige + i <= 28123){
tall[i - 1] = 0;
}
}
}
//All that's left should be summing all the numbers in the array.
long sum = 0;
for (int y = 0;y<28123;y++){
sum += tall[y];
}
System.out.println(sum);
}
public static boolean isAbundant(int n){
int sumAvDivisorer = 0;
for (int i = 1;i<n;i++){
if (n % i == 0){
sumAvDivisorer += i;
}
}
if (sumAvDivisorer > n){
return true;
}
else {
return false;
}
}
}
公共类EulerProblem23{
公共静态void main(字符串[]args){
//首先,我创建一个数组,其中包含从1到28123的所有数字。
int[]高=新int[28123];
int x=0;
对于(int j=1;j而言,此代码毫无意义:
//Then, give all the numbers that can be written as the sum of two abundant numbers
//the value 0.
int forrige = 0;
for (int i = 1;i<=28123;i++){
if (isAbundant(i)){
if (2 * i <= 28123){
tall[i - 1] = 0;
}
if (forrige + i <= 28123){
tall[i - 1] = 0;
}
}
}
//然后,将所有可以写成两个充裕数之和的数
//值为0。
int-forrige=0;
对于(int i=1;i我会这样做:
- 把所有丰富的数字组成一个数组
- 将所有对添加到一起。您可以使用嵌套的
for
循环来完成此操作
- 对于每一对与小于或等于
28123
的数字相加的数字,将该对的总和添加到总和中
什么是forrige
?i
将始终小于或等于28123
,因此您将数组中的所有值设置为0
@Blender:不,我没有。forrige是获取for循环中的前一个值。我数组中的所有值都没有设置为0,这是不正确的。噢,糟糕,对不起,您是对的。我忘了在循环结束时设置forrige=i。虽然在循环结束时设置了forrige=i
,但我似乎仍然得到了错误的答案。你的代码如何检查一个数字是否是小于28123的任意两个富足数之和?从数学上讲,我能不能:1.找到富足数2.将其乘以2。这个数字是两个富足数之和。3.将富足数与前一个富足数相加。该数字是两个富足数之和。我看不出该逻辑中的错误。正如你所解释的,你会发现一些数字是两个富足数之和。这不是所要求的。你必须确保所有的p可能和