1
   public static void algorithmOne(int n){

      long startTime = System.currentTimeMillis();

      search:
      for (int possiblePrime = 2; possiblePrime <= n; possiblePrime++){

         for (int divisor = 2; divisor < possiblePrime; divisor++)
            if ( possiblePrime%divisor == 0 && possiblePrime != divisor )
               continue search;

         System.out.println(possiblePrime);
      }
      long endTime = System.currentTimeMillis();
      System.err.println(endTime - startTime);
   }

これは素数を見つける方法ですが、「System.err.println(endTime - startTime);」に到達しない理由がわかりません。ライン。

4

2 に答える 2

1

これを試してください:

    long startTime = System.nanoTime();

    search: for (int possiblePrime = 2; possiblePrime <= 10; possiblePrime++) {

        for (int divisor = 2; divisor < possiblePrime; divisor++)
            if (possiblePrime % divisor == 0 && possiblePrime != divisor)
                continue search;

        System.out.println(possiblePrime);
    }
    long endTime = System.nanoTime();
    System.out.println(startTime);
    System.out.println(endTime);
    System.out.println("Total time taken is : " + (endTime - startTime));
于 2013-04-07T05:41:07.973 に答える
1

時差p​​rintln()に達していると思いますが、期待した場所に表示されていません。これは、stderr に出力しているためです。そのため、すべての println() の後に標準出力に追加されるとは限りません。

代わりに標準出力に出力してみてください...

素数性テストのアルゴリズムについては、素数性の決定に関するこれらの2 つの質問を参照してください(そこにリンクがあります)。また、これは素因数を見つけることについても説明しています。これは同じ問題ではありませんが、興味のある洞察がいくつかあります。具体的には、次のことを考慮してください。

  • a が n の因数であるかのように、内側のループは まで上がるだけでよくsqrt(n)、n/a もそうです。
  • 3 の後のすべての素因数は 6n-1 または 6n+1 の形式なので (考えてみてください)、 をループできます。エラトステネスのふるいについて考える場合、追加のそのような「汚い」最適化を考えることができます。

それは「簡単なこと」です。他にもできることがたくさんあります。しかし、実際には、素数性テストを自分で作成する必要があるのはなぜでしょうか? 使用できる既存のコードがあります。

于 2013-04-07T05:29:56.680 に答える