疎水性テストバイナリ

疎水性テストバイナリ

数値を生成するためにJavaプログラム(BigIntegers)を使用しており、生成された数値に対して素数テストを実行するために使用できるバイナリがあるかどうかを知りたいです。パイプを介してJavaプログラムに供給するとします。バイナリファイルを入力してください。外ですか? aptでaksのパッケージを見つけようとしましたが、「直接的な」ものは何も見えず、プログラム可能なライブラリ(GMPベースなど)のみが表示されました。

答え1

OpenSSL

openssl プログラムは疎水性テストを実行します。

$ a=31
$ openssl prime 31
1F (31) is prime

$ openssl prime 18446744073709551557      
FFFFFFFFFFFFFFC5 (18446744073709551557) is prime

コマンドはhelp()としてリストされていますopenssl help

$ openssl help 2>&1 | grep prime
pkeyparam         pkeyutl           prime             rand

-help実際のコマンドの詳細は(or)で提供されます--help

$ openssl prime -help
Usage: prime [options] [number...]
  number Number to check for primality
 -help         Display this summary
 -hex          Hex output
 -generate     Generate a prime
 -bits +int    Size of number in bits
 -safe         When used with -generate, generate a safe prime
 -checks +int  Number of checks

非常に長い数字も可能です(2^521)-1(10進数157桁のメルセン数):

$ time openssl prime $(BC_LINE_LENGTH=0 bc <<<'2^521-1')
1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
(6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151)
is prime

real    0m0.042s

opensslには接続されていませんが、素数に関連する2つの異なるユーティリティは次のとおりです。


素数と引数:

primes - 範囲要因で素数を生成する - 要因数

$  echo $(primes 10 50)
11 13 17 19 23 29 31 37 41 43 47

$ openssl prime 11 13 17 19 23 29 31 37 41 43 47
B (11) is prime
D (13) is prime
11 (17) is prime
13 (19) is prime
17 (23) is prime
1D (29) is prime
1F (31) is prime
25 (37) is prime
29 (41) is prime
2B (43) is prime
2F (47) is prime

$ factor 11 13 17 19 23 29 31 37 41 43 47
11: 11
13: 13
17: 17
19: 19
23: 23
29: 29
31: 31
37: 37
41: 41
43: 43
47: 47

$ factor 18446744073709551557
18446744073709551557: 18446744073709551557

$ factor 18446744073709551559
18446744073709551559: 41 163 269 8807 1165112831

最大(符号付き)64ビット整数に非常に近いです。

$ printf '%X\n' 18446744073709551559 $(( (2<<63) - 1 ))
FFFFFFFFFFFFFFC7
FFFFFFFFFFFFFFFF

関連情報