Prime95 は、 FreeBSD、Linux、およびMacOS用のコマンドラインユーティリティmprimeとしても配布されている、 George Woltmanによって書かれたフリーウェアアプリケーションです。これは、メルセンヌ素数を探索することに専念するボランティアコンピューティングプロジェクトであるGreat Internet Mersenne Prime Search (GIMPS)の公式クライアントです。また、オーバークロックでシステムの安定性をテストするためにも使用されます。[ 4 ]
Prime95のソースコードの大部分[ 5 ]は公開されているものの、エンドユーザーライセンス契約[ 3 ]では、ソフトウェアが電子フロンティア財団[ 6 ]が提供する報奨金の対象となる素数を見つけるために使用された場合、その報奨金はGIMPSによって請求され分配されると規定されているため、Prime95はフリーでオープンソースのソフトウェアではありません。
Prime95 は、フェルマー素数判定法(内部的には PRP、つまり「おそらく素数」と呼ばれます)を使用して、数値の素数性をテストします。その歴史の大部分において、ルーカス・レーマー素数判定法を使用していましたが、検索スループットを向上させるため、2021 年 4 月にルーカス・レーマー割り当ての利用が廃止されました[ 7 ]。具体的には、誤った結果を防ぐために、すべてのルーカス・レーマー判定法は全体を 2 回実行する必要がありましたが、フェルマー判定法は、Prime95 がテスト中に生成する証明を使用することで、元の実行時間のほんの一部で検証できます。現在のバージョンの Prime95 は、既存のルーカス・レーマー判定法の結果を二重チェックするため、および「おそらく素数」のフェルマー判定法の結果 (「素数」のルーカス・レーマー判定法の結果とは異なり、決定的なものではない) を完全に検証するために、ルーカス・レーマー判定法を実行できます。
Prime95 は、必要な完全な素数判定テストの数を減らすために、まず小さな因数を見つけようとして、数値が自明な合成数であるかどうかをチェックします。2024 年現在、テスト候補は主にPollard の p − 1 アルゴリズムを使用してフィルタリングされます。試行除算は実装されていますが、関連する演算の種類からGPUを使用するとはるかに効率的に実行できるため、Prime95 が実際にこの作業に使用されることはほとんどありません。最後に、楕円曲線因数分解法とWilliams の p + 1 アルゴリズムが実装されていますが、最新の GIMPS テストレベルでは有用ではないと考えられており、主に素数判定テストを受けたはるかに小さな Mersenne 数を因数分解する試みに使用されます。
GIMPSは1996年の設立以来、18個の新しいメルセンヌ素数を発見しており、そのうち最初の17個はPrime95を使用して発見されました。18番目で最新のM 136279841は、2024年10月にNvidia GPUを使用して発見され、Prime95とそのCPU計算を使用していない最初のGIMPSの発見となりました。 [ 8 ] [ 9 ] [ 10 ] Prime95で発見された17個の素数のうち15個は、それぞれの発見当時、既知の最大の素数でしたが、例外はM 37156667とM 42643801で、これらはより大きなM 43112609とは順番がずれて発見されました。[ 11 ]
gwnumはPrime95におけるほとんどの数学演算のコードです。これは、複数のマイクロアーキテクチャ向けに手動で調整されたアセンブリコードで記述されています。大規模な数のモジュラ乗算では、x86 CPUの(整数演算に比べて)大きな浮動小数点演算能力を活用し、無理数基数離散加重変換を倍精度で実装しています。また、P-1およびECM Stage 2で使用するための多項式乗算も実装しています。
gwnumは、 PrimeGridのPRSTなど、他の分散コンピューティングプロジェクトでも使用されています。

検索スループットを最大化するために、Prime95 の数学ライブラリ ( gwnum )の大部分は手動で調整されたアセンブリ言語で記述されており、そのため他のほとんどのコンピュータ プログラムよりもシステム リソースの使用量がはるかに多くなっています。さらに、素数判定の高い精度要件のため、このプログラムは計算エラーに非常に敏感で、エラーを積極的に報告します。これらの要因により、Prime95 はオーバークロッカーの間で特定の構成の安定性を確認するための一般的なツールとなっています。[ 4 ]
Prime95には、この目的のために「ストレステスト」(以前は「セルフテスト」と呼ばれていました)機能が組み込まれています。このモードでは、ストレステストの結果をプログラムに付属する既知の正常な結果と比較します。その結果、計算ミスは確実に検出されます。「small」および「medium」FFTモードは、CPUのキャッシュに適合するメモリアクセスパターンを持ち、CPUコアに最大のストレスをかけるのに最適です。「large」FFTモードでは、RAMに頻繁にアクセスする必要があります。その結果、CPUへのストレスは少なくなりますが、メモリコントローラとメモリモジュールの両方をテストできます。これらのモードを組み合わせた「blend」モードもあります。[ 12 ]