このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/479
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文(含コード&リンク):オイラーの定理の仮証明 
#  
# 互いに素なnとaについてオイラーの定理が成り立つか確かめる。 
# とりあえずnは1以上5以下の数とし、aは1以上n以下とする。 
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10654.txt 

互いに素なnとaについてオイラーの定理が成り立つか確かめる :-
        findall(_n,(
                    for(1,_n,5),
                    互いに素なnとaについてオイラーの定理が成り立つか確かめる(_n)),
                L),
        length(L,5).

互いに素なnとaについてオイラーの定理が成り立つか確かめる(_n) :-
        findall(Mod,(
                     互いに素なnとa(_n,_a),
                     オイラー関数(_n,Z),
                     Mod is (_a ^ Z) mod _n),
                L),
        all(L,1),!.

互いに素なnとa(_n,_a) :-
        findall(M,for(1,M,_n-1),L),
        組み合わせ(L,2,[_n,_a]),
        最大公約数(_n,_a,1).

オイラー関数(_n,Z) :-
        count((for(1,M,_n-1),\+(0 is _n mod M)),Z).