Most Useful Program

もっとも便利なプログラム

受賞者: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未満でないとだめとのこと。

解説

面白いポイントがあまりよくわかっていない。 自作の素因数分解アルゴリズムを、setjmplongjmpを使ってややこしめに実装したもの? アルゴリズムについてはオランダのコンピュータクラブの1982年の会誌に載っているらしいが、見つけることはできなかった。 aaAaaaP->p->P->p = P->p;など、難読化自体は普通のように見えるが、何かを見落としているかもしれない。