このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1248012902/454 
#  【 課題 】http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm 822.txt 
# 
# (1) 入力された正の整数が素数であるか判定するプログラムを作成する。 
# ただし、機能は以下のように実現するものとする。 
# boolean 型の戻り値をもつメソッド isPrime は引数に正の整数をとり、 
# 素数なら true を返し、そうでないなら false を返す。 
# main メソッドから、isPrime を呼び出すようにせよ。 
# 
# (2)入力された正の整数が素数であるか判定し、素数でない場合は最少の素因数を 
# 出力するプログラムを作成する。ただし、機能は以下のように実現するものとする。 
# int 型の戻り値をもつメソッド minimumDivisor は引数に正の整数をとり、 
# 素数なら0 を返し、そうでないなら最小の素因数を返す。 
# main メソッドから、minimumDivisor を呼び出し、戻り値に応じた出力をすようにせよ。
% (1)
program :- 
    user_parameters([A]), 
    atom_to_term(A,N,_), 
    isPrime_test(N,_診断), 
    write_formatted('%t\n',[_診断]). 

isPrime_test(N,true) :- isPrime(N). 
isPrime_test(N,false) :- \+(isPrime(N)). 

isPrime(1) :- !. 
isPrime(N) :- \+((for(2,M,N//2),0 is N mod M)),!.

% (2)
program :- 
    user_parameters([A]), 
    atom_to_term(A,N,_), 
    minimumDiviso(N,_診断), 
    write_formatted('%t\n',[_診断]). 

minimumDiviso(1,0) :- !. 
minimumDiviso(N,M) :- for(2,M,N//2),0 is N mod M,!. 
minimumDiviso(N,0).