-4

大きな数の最大の素数を見つけることに関するプロジェクト euleur からの質問を解決したかったのです。Visual Studio 2012 の仮想マシンでコードを実行すると、コードがフリーズしたように見えます。ループに入るとコードは正常に機能しますが、実行するとコンソールが常に表示されます。あたかもプログラムがまだ実行されているかのようです。プログラムの実行に時間がかかる可能性がありますか?

マイコード

static void Main(string[] args)
{
    long number = 5;

    for (long i = 1; i < 600851475143; i++)
    {
        if (i % 2 != 0 && i % 1 == 0 && i % i == 0)
            number = i;
    }

}
4

3 に答える 3

2

このコードを実行しましたが、実行に時間がかかりますが、進行しているように見えます (インクリメントします)。i が素数かどうかを判断するには、次のようにします。

    public static bool IsPrime(long candidate)
    {
        // Test whether the parameter is a prime number.
        if ((candidate & 1) == 0)
        {
            return candidate == 2;
        }
        // Note:
        // ... This version was changed to test the square.
        // ... Original version tested against the square root.
        // ... Also we exclude 1 at the very end.
        for (int i = 3; (i * i) <= candidate; i += 2)
        {
            if ((candidate % i) == 0)
            {
                return false;
            }
        }
        return candidate != 1;
    }

私はこれについて信用を主張することはできません。http://www.dotnetperls.com/primeからです。

いくつかの Console.WriteLines をメイン メソッドに追加して進行状況を確認します。

    static void Main(string[] args)
    {
        long number = 5;

        for (long i = 1; i < 600851475143; i++)
        {
            if (IsPrime(i))
            {
                Console.WriteLine(i);
                number = i;
            }
        }
    }

これらのアルゴリズムに関する他のリソースもあります: http://csharpinoneroom.blogspot.com/2008/03/find-prime-numer-at-fastest-speed.html

幸運を!

于 2012-11-08T05:33:45.120 に答える
0

アルゴリズムが正しくありません。プロジェクトオイラーに適した合成数の素因数を見つける簡単な方法は次のとおりです。

function factors(n)
    f := 2
    while f * f <= n
        if n % f == 0
            output f
            n := n / f
        else
            f := f + 1
    output n

これは、nを各fで連続して除算し、 nを減らし、素因数が見つかるたびにfを出力することで機能します。最後の要因は、 fがnの平方根よりも大きい場合の残りのnであり、その時点でnは素数でなければなりません。

整数を因数分解する方法は他にもあります。もっと準備ができたら、ブログでこのエッセイを控えめにお勧めします。

于 2012-11-08T13:41:10.373 に答える
-2

結局のところ、世界最速のコードを書いても、正しく動作しなければ意味がありません。あなたのものはそうではありません、スピードはさておき。

于 2012-11-08T04:58:37.643 に答える