gpt4 book ai didi

java - 查找 1 到 9999 之间的完美数字。 《Java 的艺术与科学》中的练习

转载 作者:行者123 更新时间:2023-12-01 13:52:32 25 4
gpt4 key购买 nike

我试图通过找出它们的所有除数来找到完美的数字。如果它们的和等于数字,则打印出数字。但显然它不起作用。

import acm.program.*;

public class PerfectNumber extends ConsoleProgram{
public void run() {
for (int n = 1; n < 9999; n++) {
for (int d = 2; d < n - 1; d++) {
//d is the potential divisor of n, ranging from 2 to n-1,//
//not including 1 and n because they must be the divisors.//
if (isPerfectNumber(n,d))
print(n );
}
}
}

//method that determines if n is perfect number.//
private boolean isPerfectNumber(int n, int d) {
while (n % d == 0) {
int spd = 1;
spd += d;
if (spd == n) {
return true;
} else {
return false;
}
}
}
}

最佳答案

查看您的案例中的代码大多数时候都会返回 false。我认为你正在寻找的东西有点错误。因为 d 小于 n,并且 n 除以 d 将始终大于 0。此外,在该循环中,您永远不会更改 d 的值。

解决方案可能是:

     public void run() {
for (int n = 1; n < 9999; n++)
{ spd=1;
for (int d = 2; d <= n/2; d++) { //no need to go further than n/2
//d is the potential divisor of n, ranging from 2 to n-1,//
if(n%d==0) spd+=d; //if n divides by d add it to spd.

}
if(spd==n) print(n);
}

试试这个,让我知道它是否适合您。

我在这里发现了一些很酷的东西:http://en.wikipedia.org/wiki/List_of_perfect_numbers 。使用这个公式你应该会更快:2^(p−1) × (2^p − 1)。您可以在维基链接上更好地查看该公式。

关于java - 查找 1 到 9999 之间的完美数字。 《Java 的艺术与科学》中的练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19862980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com