引用元:https://www.ioccc.org/1996/dalbec.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1996/dalbec.hint
動作
素数列挙と見せかけて、素数でないものを含むこともある列挙。
$ gcc -o dalbec dalbec.c
$ ./dalbec
3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 ... 2029 2039 2047 2053 2063 ...
2047は23×89なので素数ではない。
引数に3を与えても、121=11×11が含まれている。
$ ./dalbec 3
5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 121 127 131 ...
解説
底aとする強い確率的素数を列挙するプログラムとなっている。
デフォルトでは底2で、この場合最初に現れる擬素数は2047と知られている。コマンドライン引数は底の指定で、底3の場合の最初の擬素数は121である。
比較的短いコードだが、main
の再帰によっていろんな計算をしていてややこしい。識別子はI
とO
と1
と0
で難読化されている。