gpt4 book ai didi

java - Java 上的欧拉项目练习 10。 isPrime 方法在循环中不起作用

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

所以,我开始学习编程并尝试使用 java 进行 euler 项目。问题 10 看起来非常简单,我想我可以使用我之前在另一个问题中用来获取素数的方法。问题是,该方法有效,除非我将其放入 for 循环中,并且我无法看出这个方法与另一个方法之间的差异。

这是我的代码

package euler10;
public class Primesum {
public static void main(String[] args) {
int suma=0;

for (int i=0; i<2000000; i=i+2){

if (isPrime(i) == true){
System.out.println(i);
suma=suma+i;
}

}
System.out.println(suma);
}

public static boolean isPrime(int num) {
boolean prime = false;
long i;
for (i=2; i < Math.sqrt(num) ; i++){
long n = num%i;
if (n == 0){
prime = false;
} else {
prime = true;
}
}
return prime;
}
}

isPrime 方法在循环外运行良好,但在循环内它始终为 true。即使是偶数,它也会返回 true,我认为这些不是很重要:)

最佳答案

我真的不认为这与循环有任何关系......

但是,代码中存在逻辑缺陷...

public static boolean isPrime(int num) {
long i;
for (i=2; i <= Math.sqrt(num) ; i++){
long n = num%i;
if (n == 0){
return false;//found a divisor : not prime
}
}
//went through all the way to sqrt(num), and found no divisor: prime!
return true;
}

只要找到第一个除数,我们就可以停止,没有必要找到所有的除数——这是另一个练习......

此外,从逻辑上讲,如果有人想以这种方式使用 boolean 变量,则应使用 true 对其进行初始化,然后将其设置为 false,并保持不变,当找到除数时...

关于java - Java 上的欧拉项目练习 10。 isPrime 方法在循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235403/

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