-3
public static long sum7()
{
    int c = 1;
    boolean isprime = true;
    long prime = 0;
    for (long i = 3; i <= Long.MAX_VALUE; i++)
    {
        for (long j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                isprime = false;
                break;
            }
        }
        if (isprime == true)
        {
            c++;
        }
        if (c == 10001)
        {
            prime = i;
            break;
        }
    }
    return prime;
}
static Scanner scanner1 = new Scanner(System.in);

public static void main(String[] args)
{
    System.out.println(sum7());
}

プロジェクトオイラーの質問(Q7)のために次のコードを試していました.10001番目の素数を見つけるはずですが、うまくいきませんでした. ビルドは成功しましたが、何も表示されません。助けてください。前もって感謝します....

4

1 に答える 1

2

あなたが何をしようとしているのか正確には明らかではないので、コードに基づいて推測する必要があります。10001番目の素数を見つけたいと思っていると思います。

isprimeまず、ループの最後で true に戻すのを忘れていました。現在のように、最初の反復の後は永久に false になります。つまり、検出された素数は 3 だけであり、その後 2^63 (事実上無限) までループし、最終的に 0 を返します。

boolean isprime = true;ループの先頭に移動することで、問題を解決し、変数のスコープをより適切にすることができます。ループしている間にループに移動primeし、ビットを変更してif c==10001直接戻るようにすることもできます。

第二に、c = c++;正しくありません。変数をインクリメントしてから、古い値にリセットしています。c++;またはのいずれかを行う必要がありますc = c + 1

于 2012-10-23T05:02:28.780 に答える