gpt4 book ai didi

java - 前 1000 个质数之和

转载 作者:行者123 更新时间:2023-12-01 07:09:38 34 4
gpt4 key购买 nike

我有下面的程序,我试图找到前 1000 个素数的总和。在代码中,解决方案1和2有什么区别?为什么我不应该将 count 变量放在 if 条件之外?如果我把变量放在 if 之外,我显然没有得到我需要的答案,但我不明白为什么它在逻辑上是错误的。这可能是一件简单的事情,但我无法弄清楚。请高手帮忙。

解决方案1:

public class SumOfPrimeNumbers {
public static void main(String[] args) {
long result = 0;
int number = 2;
int count = 0;
while (count < 1000) {
if (checkPrime(number) == true) {
result = result + number;
count++;
}
number++;
}
System.out.println("The sum of first 1000 prime numbers is " + result);
}

public static boolean checkPrime(int number) {
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}

}

解决方案 2:

public class SumOfPrimeNumbers {    
public static void main(String[] args) {
long result = 0;
int number = 2;
int count = 0;
while (count < 1000) {
if(checkPrime(number)==true)
{
result = result + number;
}
count++; //The count variable here has been moved to outside the loop.
number++;
}
System.out.println("The sum of first 1000 prime numbers is "+ result);
}

public static boolean checkPrime(int number) {
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}

}

最佳答案

您不应检查 bool 函数的返回值是否等于 true:这一行

if(checkPrime(number)==true)

相当于

if(checkPrime(number))

最后,在 if 之外计数递增的解决方案将非素数与素数一起计数,产生明显错误的结果。

以下是您应该考虑的“风格”的几点:

  • 当候选除数大于数字的平方根时,可以停止在 checkPrime 中检查候选除数
  • 如果您存储到目前为止所见过的素数,并仅通过素数列表中的数字来检查整除性,您可以做得更好。当您查找前 1000 个素数时,这并不重要,但对于更大的数字,这可能很重要。

关于java - 前 1000 个质数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994861/

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