【发布时间】:2021-11-30 20:04:52
【问题描述】:
我应该使用以下伪代码创建一个完美的数字类:
For i from 2 to “very large”,
For j from 2 to √i,
if (j evenly divides i),
accumulate the sum j and i/j
if √i is an integer
subtract √i ... you added it twice
if the sum of divisors == i
Print the number ... it’s perfect!
所以这是我的版本。它运行,但它根本不做我想要的。它只是运行并且不产生任何输出。有人可以告诉我我的程序有什么问题吗?这让我很困扰。
import java.util.Scanner;
public class PerfectNumber {
public static void main(String[] args) {
double sum = 0
double newsum = 0;
for (int i = 2; i < 1000000; i++) {
for (int j = 2; i<Math.sqrt(i); j++){
if (i%j==0){
sum = j + (i%j);
}
if (Math.sqrt(i)==(int)i){
newsum = sum - Math.sqrt(i);
}
if (sum == 0) {
System.out.println(sum + "is a perfect number");
}
}
}
}
}
【问题讨论】:
-
在第二个“for”条件下更改 i --> j。而且 if(sum == 0) 始终仅在 sum 为零时才打印。有关“完美数”算法的更多信息,请参阅此“en.wikipedia.org/wiki/Perfect_number”。
-
这确实有帮助!但是现在它只打印出 0.0 是一个完美的数字
-
你为什么在你的公式中使用平方根?
-
if (i%j==0){ sum = j + (i%j);所以... sum = j +0?
标签: java math perfect-numbers