gpt4 book ai didi

java - Java 中的代码不会停止运行

转载 作者:行者123 更新时间:2023-12-02 05:49:13 25 4
gpt4 key购买 nike

我正在用 Java 解决 Euler 项目中的问题 10,即

"The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million."

我的代码是

package projecteuler_1;

import java.math.BigInteger;
import java.util.Scanner;

public class ProjectEuler_1 {

public static void main(String[] args) {
int sum = 0, i = 2;
while (i <= 2000000) {
if (isPrime(i)) {
sum += i;
}
i++;
}
System.out.println(sum);
}

public static boolean isPrime(int n) {
int i, res;
boolean flag = true;
for (i = 2; i <= n / 2; i++) {
res = n % i;
if (res == 0) {
flag = false;
break;
}
}
return flag;
}
}

但是代码没有给我任何结果,它不会停止运行。为什么?

最佳答案

通过进行微小的更改,您可以极大地提高性能:

更改:

for (int i = 2; i < n; i++) {

致:

int max = Math.sqrt(n);
for (int i = 2; i <= max; i++) {

您只需检查数字的平方根,因为在向上的过程中已经找到了更大的因子。

进行此更改会将您的算法从 O(n2) 更改为 O(n log(n)) (我认为)。您的代码没有输出任何内容,因为运行时间太长 - 更改应该有望在合理的时间内为您提供答案。

关于java - Java 中的代码不会停止运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732444/

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