数値を生成するために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