もっとも便利なプログラム
受賞者:Albert van der Horst
動作・解説にジャンプ »
引用元:https://www.ioccc.org/1992/albert.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1992/albert.hint
素因数分解をするプログラム。素因数を小さい順にあげていく。残りが高々1つになったら終了する。
$ gcc -o albert albert.c $ ./albert 111111111111111111111111111111 3 7 11 13 31 37 41 211 241 271 2161 9091 At most one remains
分解対象の数は任意桁でよいが、素因数はMAX_LONG未満でないとだめとのこと。
MAX_LONG
面白いポイントがあまりよくわかっていない。 自作の素因数分解アルゴリズムを、setjmpとlongjmpを使ってややこしめに実装したもの? アルゴリズムについてはオランダのコンピュータクラブの1982年の会誌に載っているらしいが、見つけることはできなかった。 aaAaaaやP->p->P->p = P->p;など、難読化自体は普通のように見えるが、何かを見落としているかもしれない。
setjmp
longjmp
aaAaaa
P->p->P->p = P->p;