Javaでプログラムを高速化するにはどうすればよいですか(完全数ファインダー)?

user3056796

完全数を見つけるのを速くすることはできますか?配列と別のアルゴリズムで高速化しようとしましたが、どれも高速化できませんでした。

public class Perfect{
    static long perfectNumber;
    static long startTime = System.nanoTime();
    static long endTime;
    static long mersenne;

    public static void main(String[] args) {

        long p = 2;
        while (p < 32) {
            if( p % 2 == 0&&p!=2){
                    p++;
            }
            else{
            if (isPrime(p) == true) {

                mersenne = (long) (Math.pow(2, p) - 1);
                if (isPrime(mersenne) == true) {
                    perfectNumber = (long) Math.pow(2, (p - 1)) * mersenne;
                    System.out.println(perfectNumber);
                }
            }
            p++;
        }

    }
        endTime = System.nanoTime();
        System.out.println("Time:   " + (endTime - startTime) + "ns"
                );
    }
    private static boolean isPrime(long testPrime) {


            for (long i = 3; i < Math.sqrt(testPrime); i += 2) {

                if (testPrime % i == 0) {

                    return false;
                }
        }

        return true;
    }
}
OldCurmudgeon

あなたが行うことができるいくつかのマイナーな改善があります-おそらくどれも実行時間に何の違いもありません:

  1. 使用p % 2すると除算が発生する可能性がありp & 1ます。除算は行われないため、数分の1速くなるはずです。
  2. 妥当な限界まですべての素数を簡単に事前計算できます。
  3. Math.pow(2,x)2 << xすべての場合に同等であり、はるかに高速である可能性があります。
  4. ループ内での印刷は無駄です。すべての結果をリストに集めて、最後に印刷する必要があります。

これらの些細でおそらく時期尚早な最適化とは別に、最適化を試みる前に、計算を数百回実行し、平均時間をとる必要があります。

ところで-使用nanotimeしているからといって、ナノ秒の解像度が得られているわけではありません-それからはほど遠いです。

また-

ウィキペディアの記事が指摘しているように、そこに記載されている一般的なバイナリパターンを列挙することで、計算の多くを回避できます。

for ( int i = 0; i < 10; i++ ) {
  long q = ((1 << (i+2)) - 1) << (i+1);
  // Printing BigIntegers in binary is easy.
  BigInteger bq = BigInteger.valueOf(q);
  System.out.println(q+" = "+bq.toString(2));
}

6 = 110
28 = 11100
120 = 1111000
496 = 111110000
2016 = 11111100000
8128 = 1111111000000
32640 = 111111110000000
130816 = 11111111100000000
523776 = 1111111111000000000
2096128 = 111111111110000000000

明らかに、あなたはまだそれらをテストする必要がありますが、あなたはほとんど同じくらい多くをテストする必要はありません。

また、さらに一歩進めたいBigInteger場合は、次のようなものから始めることができます。

for ( int i = 0; i < 10; i++ ) {
  BigInteger p = BigInteger.ONE.shiftLeft(i+2).subtract(BigInteger.ONE).shiftLeft(i+1);
  System.out.println(p.toString(10)+" = "+p.toString(2));
  //long q = ((1 << (i+2)) - 1) << (i+1);
  //BigInteger bq = BigInteger.valueOf(q);
  //System.out.println("    "+bq.toString(10)+" = "+bq.toString(2));
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ランダムなノンブロッキングプールの初期化を高速化するにはどうすればよいですか?

分類Dev

プログラムを高速化するにはどうすればよいですか?

分類Dev

トレントダウンロードを高速化するにはどうすればよいですか?

分類Dev

ログインセッションを高速化するにはどうすればよいですか?

分類Dev

プロファイルされたNumPyコードを高速化するにはどうすればよいですか?ベクトル化、Numba?

分類Dev

マイクロコントローラーボタンでこのwhileループを高速化するにはどうすればよいですか?

分類Dev

ファイルをRamdiskに移動してJavaプロジェクトを高速化するにはどうすればよいですか?

分類Dev

このプログラムを高速化してフィボナッチ数列を見つけるにはどうすればよいですか

分類Dev

メモリスキャンプログラムを高速化するにはどうすればよいですか?

分類Dev

Bootstrapナビゲーションバーのモバイルドロップダウンを高速化するにはどうすればよいですか?

分類Dev

〜300000ファイルをトリミング+サイズ変更する必要があります。ランタイム= 4日以上。bashスクリプトを高速化するにはどうすればよいですか?

分類Dev

C#プログラムを高速化して、最初の実行ですばやく実行するにはどうすればよいですか?

分類Dev

大きなファイルのファイル書き込みプロセスを高速化するにはどうすればよいですか?

分類Dev

スイングで画像のズームイン/ズームアウトを高速化するにはどうすればよいですか?

分類Dev

ファイルの検索を高速化するにはどうすればよいですか?

分類Dev

ファイルの検索を高速化するにはどうすればよいですか?

分類Dev

Symfony2でテンプレートのレンダリングを高速化するにはどうすればよいですか?

分類Dev

ダブルforループを高速化/置換するにはどうすればよいですか?

分類Dev

SSDを使用してプログラムの起動を高速化するにはどうすればよいですか?

分類Dev

NVIDIA以外のセットアップでディープラーニングを高速化するにはどうすればよいですか?

分類Dev

Angularを使用して大量のデータのブラウザレンダリングを高速化するにはどうすればよいですか?

分類Dev

このファイル作成プロセスを高速化するにはどうすればよいですか?

分類Dev

すべてのコアを利用して、numpy 3Dアレイに基づくシミュレーションプログラムを高速化するにはどうすればよいですか?

分類Dev

gwtコンパイラを高速化するにはどうすればよいですか?

分類Dev

パンダのグループごとの欠落値の置換を高速化するにはどうすればよいですか?

分類Dev

.txtファイルを使用して形成されたPythonデータフレームでの検索/フィルタリングを高速化するにはどうすればよいですか?

分類Dev

ログインしたユーザーのWordpressクエリをキャッシュ/高速化するにはどうすればよいですか?

分類Dev

Java Webアプリケーションのコンパイルを高速化するにはどうすればよいですか?

分類Dev

ラップトップでUbuntu16.04を高速化するにはどうすればよいですか?

Related 関連記事

  1. 1

    ランダムなノンブロッキングプールの初期化を高速化するにはどうすればよいですか?

  2. 2

    プログラムを高速化するにはどうすればよいですか?

  3. 3

    トレントダウンロードを高速化するにはどうすればよいですか?

  4. 4

    ログインセッションを高速化するにはどうすればよいですか?

  5. 5

    プロファイルされたNumPyコードを高速化するにはどうすればよいですか?ベクトル化、Numba?

  6. 6

    マイクロコントローラーボタンでこのwhileループを高速化するにはどうすればよいですか?

  7. 7

    ファイルをRamdiskに移動してJavaプロジェクトを高速化するにはどうすればよいですか?

  8. 8

    このプログラムを高速化してフィボナッチ数列を見つけるにはどうすればよいですか

  9. 9

    メモリスキャンプログラムを高速化するにはどうすればよいですか?

  10. 10

    Bootstrapナビゲーションバーのモバイルドロップダウンを高速化するにはどうすればよいですか?

  11. 11

    〜300000ファイルをトリミング+サイズ変更する必要があります。ランタイム= 4日以上。bashスクリプトを高速化するにはどうすればよいですか?

  12. 12

    C#プログラムを高速化して、最初の実行ですばやく実行するにはどうすればよいですか?

  13. 13

    大きなファイルのファイル書き込みプロセスを高速化するにはどうすればよいですか?

  14. 14

    スイングで画像のズームイン/ズームアウトを高速化するにはどうすればよいですか?

  15. 15

    ファイルの検索を高速化するにはどうすればよいですか?

  16. 16

    ファイルの検索を高速化するにはどうすればよいですか?

  17. 17

    Symfony2でテンプレートのレンダリングを高速化するにはどうすればよいですか?

  18. 18

    ダブルforループを高速化/置換するにはどうすればよいですか?

  19. 19

    SSDを使用してプログラムの起動を高速化するにはどうすればよいですか?

  20. 20

    NVIDIA以外のセットアップでディープラーニングを高速化するにはどうすればよいですか?

  21. 21

    Angularを使用して大量のデータのブラウザレンダリングを高速化するにはどうすればよいですか?

  22. 22

    このファイル作成プロセスを高速化するにはどうすればよいですか?

  23. 23

    すべてのコアを利用して、numpy 3Dアレイに基づくシミュレーションプログラムを高速化するにはどうすればよいですか?

  24. 24

    gwtコンパイラを高速化するにはどうすればよいですか?

  25. 25

    パンダのグループごとの欠落値の置換を高速化するにはどうすればよいですか?

  26. 26

    .txtファイルを使用して形成されたPythonデータフレームでの検索/フィルタリングを高速化するにはどうすればよいですか?

  27. 27

    ログインしたユーザーのWordpressクエリをキャッシュ/高速化するにはどうすればよいですか?

  28. 28

    Java Webアプリケーションのコンパイルを高速化するにはどうすればよいですか?

  29. 29

    ラップトップでUbuntu16.04を高速化するにはどうすればよいですか?

ホットタグ

アーカイブ