0

それで、私はプログラミングを学び始め、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を返しますが、それらはあまり重要ではないと思います:)

4

2 に答える 2

2

ループとは何の関係もないと思います...

ただし、コードには論理的な欠陥があります...

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;
}

最初の約数が見つかったらいつでも停止できます。すべてを見つける必要はありません。これは別の演習です...

また、論理的には、ブール変数をこのように使用したい場合は、 で初期化されtrue、 に入れられfalse、除数が見つかったときにそのまま保持されます...

于 2013-08-14T15:11:07.203 に答える