もっとも便利なプログラム
引用元:https://www.ioccc.org/1992/albert/albert.orig.c
審査員・作者による説明:https://www.ioccc.org/1992/albert/index.html
素因数分解をするプログラム。素因数を小さい順にあげていく。残りが高々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未満でないとだめとのこと。
面白いポイントがあまりよくわかっていない。
自作の素因数分解アルゴリズムを、setjmpとlongjmpを使ってややこしめに実装したもの?
アルゴリズムについてはオランダのコンピュータクラブの1982年の会誌に載っているらしいが、見つけることはできなかった。
aaAaaaやP->p->P->p = P->p;など、難読化自体は普通のように見えるが、何かを見落としているかもしれない。