このディレクトリの索引


:- dynamic(階乗保存計算/2).
 
'ウィルソンの定理を使って素数を判定する関数is_primeを実装し、100000以下の素数以外をリストに得る'(_10000以下の素数リスト) :-
        findall(_p,(
                    between(1,10000,_p),
                    \+(is_prime(_p))),
                _10000以下の素数リスト).
 
is_prime(_p) :-
        'ウィルソンの定理とは pが素数 <=> (p-1)!+1 (mod p) == 0'(_p).
 
'ウィルソンの定理とは pが素数 <=> (p-1)!+1 (mod p) == 0'(_p) :-
        _p > 0,
        Y is _p - 1,
        階乗保存計算(Y,Z),
        0 is (Z + 1) mod _p,!.
 
階乗保存計算(0,1) :- !.
階乗保存計算(1,1) :- !.
階乗保存計算(N,X) :-
        N2 is N - 1,
        階乗保存計算(N2,Y),
        X is N * Y,
        asserta((階乗保存計算(N,X) :- !)).