このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/891
#  [1] C言語演習 
#  [2] http://ime.nu/codepad.org/Qbz0E2cP を改良して、 
#  「乗除」の回数を減らすプログラムを作成しなさい。 
#  ただし、http://ime.nu/codepad.org/ko7MPFKI 以外の方法を使用すること。 
#   ,離廛蹈哀薀爐鰺用して、以下のプログラムを作成せよ。 
#  1.各素数の各桁の和が偶数になる数のみを表示するプログラム 
#  2.表示されている1の個数を表示するプログラム 
#  [3.1] Windows7 
#  [3.3] C言語 
#  [4] 今日の21時まで 
#  [5]配列まで 
#  ,呂匹里茲Δ砲靴堂鷽瑤鮓困蕕靴燭も教えていただけると幸いです。 
#  どうかよろしくお願いします。   
# 
# 

:- dynamic(階乗保存計算/2).

各素数の各桁の和が偶数になる数のみを表示する :-
        '1000未満の素数ならび'(_素数ならび),
        各素数の各桁の和が偶数になる数のみを表示する(_素数ならび).

各素数の各桁の和が偶数になる数のみを表示する([]).
各素数の各桁の和が偶数になる数のみを表示する([N|R]) :-
        number_codes(N,Codes),
        findsum(N2,(
                    append(_,[N1|_],Codes),
                    N2 is N1 - 48),
                Sum),
        0 is Sum mod 2,
        write('%t ',[N]),
        各素数の各桁の和が偶数になる数のみを表示する(R).
各素数の各桁の和が偶数になる数のみを表示する([_|R]) :-
        各素数の各桁の和が偶数になる数のみを表示する(R).

'1000未満の素数ならび'(_素数ならび) :-
        '1000未満の素数ならび'(5,[2,3],_素数ならび).

'1000未満の素数ならび'(1000,_素数ならび,_素数ならび) :- !.
'1000未満の素数ならび'(N,L1,_素数ならび) :-
        奇数(N),
        既に計算済みの素数では割り切れない(N,L1),
        L1 = [M|_],
        ウィルソンの定理による素数判定(N,素数です),
        N2 is N + 1,
        '1000未満の素数ならび'(N2,[N|L1],_素数ならび).
'1000未満の素数ならび'(N,L1,_素数ならび) :-
        N2 is N + 1,
        '1000未満の素数ならび'(N2,L1,_素数ならび).

既に計算済みの素数では割り切れない(N,[]) :- !.
既に計算済みの素数では割り切れない(N,[M|R]) :-
        0 is N mod M,!,
        fail.        
既に計算済みの素数では割り切れない(N,[M|R]) :-
        既に計算済みの素数では割り切れない(N,R).

ウィルソンの定理による素数判定(X,素数です) :-
        X > 0,
        Y is X - 1,
        階乗保存計算(Y,Z),
        0 is (Z + 1) mod X,!.
ウィルソンの定理による素数判定(X,素数ではありません) :-
        X > 0,
        Y is X - 1,
        階乗保存計算(Y,Z),
        \+(0 is (Z + 1) mod X),!.

階乗保存計算(0,1) :- !.
階乗保存計算(1,1) :- !.
階乗保存計算(N,X) :-
        N2 is N - 1,
        階乗保存計算(N2,Y),
        X is N * Y,
        asserta((階乗保存計算(N,X) :- !)).

奇数(N) :-
        1 is N mod 2.