このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/400
#  [1] 授業単元:アルゴリズム 
#  [2] 問題文(含コード&リンク): 
#   入力された数値が素数か否かを判定し,結果を画面に出力せよ.ただし 
#   
#   .襦璽很仁瓩鮖箸κ法 
#   ∈撞⊇萢を使う方法 
#   上記のどちらも使わない方法 
#   
#   のいずれについても解答する事. 
#  

'入力された数値が素数か否かを判定し,結果を画面に出力する'(_数) :-
        入力された数値が(_入力された数値),
        '素数か否かを判定し,結果を画面に出力する'(_入力された数値).

入力された数値が(_入力された数値) :-
        write('1以上の整数を入力して下さい : '),
        get_line(Line),
        入力された数値診断(Line,_入力された数値),!.
入力された数値が(_入力された数値) :-
        入力された数値が(_入力された数値).

入力された数値診断(Line,_入力された数値) :-
        atom_to_term(Line,_入力された数値,_),
        integer(_入力された数値),
        _入力された数値 >= 1,!.
入力された数値診断(Line,_入力された数値) :-
        writef('入力された %t からは1以上の整数が得られません。再入力をお願いします\n',[Line]),
        fail.

'素数か否かを判定し,結果を画面に出力する'(_入力された数値) :-
        素数(_入力された数値),
        writef('%tは素数です\n',[_入力された数値]),!.
'素数か否かを判定し,結果を画面に出力する'(_入力された数値) :-
        \+(素数(_入力された数値)),
        writef('%tは素数ではありません\n',[_入力された数値]).

素数(_数) :-
        約数の個数(_数,_約数の個数),
        _約数の個数 =< 2.

約数の個数(_数,_約数の個数) :-
        _数_1 is _数 - 1,
        count((  for(1,N,_数_1),
                 0 is _数 mod N)),
             _約数の個数).