gpt4 book ai didi

java - 程序结束,但控制台仍然挂起

转载 作者:行者123 更新时间:2023-12-01 09:32:05 24 4
gpt4 key购买 nike

该程序用于生成完美数。我的代码似乎没问题,但由于某种原因它在第 7 个完美数之后停止工作。仔细查看控制台后,我意识到我的程序没有终止。

这是我的代码:

public class Main {

public static int amount = 509;

public static long m;
public static long n;
public static double o;
public static double p;
public static int q = 1;
public static boolean prime = true;
public static boolean mersennePrime = true;

public static void prime() {
if (m % 2 == 0) prime = false;
for (int i = 3; i * i <= m; i += 2) {
if (m % i == 0) prime = false;
}

if (m == 1) prime = false;
if (m == 2) prime = true;
}

public static void mersennePrime() {
if (prime) {
o = Math.pow(2, m) - 1;
for (int i = 3; i * i <= o; i += 2) {
if (o % i == 0) {
mersennePrime = false;
break;
}
}
}
else mersennePrime = false;
}

public static void perfectNumber() {
if (mersennePrime) {
p = (o * (o + 1)) / 2;
System.out.println(q + ". " + m + ": mersenne prime = " + o + ", perfect number = " + p);
q++;
}
}

public static void reset() {
prime = true;
mersennePrime = true;
n = 0;
o = 0;
p = 0;
}

public static void main(String[] args) {
for (int i = 2; i <= amount; i++) {
m = i;
prime();
mersennePrime();
perfectNumber();
reset();
}
}
}

这是我的输出:

  1. 2:梅森素数 = 3.0,完全数 = 6.0
  2. 3:梅森素数 = 7.0,完美数 = 28.0
  3. 5:梅森素数 = 31.0,完全数 = 496.0
  4. 7:梅森素数 = 127.0,完全数 = 8128.0
  5. 13:梅森素数 = 8191.0,完全数 = 3.3550336E7
  6. 17:梅森素数 = 131071.0,完全数 = 8.589869056E9
  7. 19:梅森素数 = 524287.0,完全数 = 1.37438691328E11

最佳答案

问题是 if (o % i == 0)mersennePrime方法。 o是 double 型变量。 double对其进行模运算(%)是不准确的。在此程序中,值o对于每个素数都在增加。例如:对于数字 61,o 的值为 2.305843009213694E18 。并且对其进行模运算,我认为它不会有太大的准确性。

实际上你的程序一直在运行(我已经到达第 131 个数字,大约花了 10 分钟)。但在第 7 个完美数之后不打印任何内容,因为 if (o % i == 0)执行不准确,让一切都受阻。因此,即使是 mersennePrime 的号码应该是真的,却变成了假。如无 mersennePrime是真的,在第 7 个完全数之后就找不到完全数了。

使用 BigDecimal 而不是double我想会解决你的问题。

另外,请注意for (int i = 3; i * i <= o; i += 2)因为i * i本身是一个整数。如o可以更大,整数将无法跟上它。

关于java - 程序结束,但控制台仍然挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39319916/

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