このディレクトリの索引
http://test/read.cgi/tech/1354715494/33
#  【お題】 
#  ウィルソンの定理を使って素数を判定する関数is_primeを実装し、 
#  10000以下の素数以外の数の和を求めよ 
#  
#  ウィルソンの定理 
#  pが素数 <=> (p-1)!+1 (mod p) == 0 

:- dynamic(f/2).

a(A) :- b(B,(between(1,10000,B),\+(d(B))),A).

b(A,B,C) :- findall(A,B,D),c(D,C).

c([],0).
c([A|B],C) :- c(B,D),C is A + D.

d(A) :- e(A).

e(A) :- A > 0,B is A - 1,f(B,C),0 is (C + 1) mod B,!.

f(0,1) :- !.
f(1,1) :- !.
f(A,B) :- B is A - 1,f(B,C),B is A * C,asserta((f(A,B) :- !)).