このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/7
#  [1] 授業単元: プログラミング 
#  [2] 問題文(含コード&リンク):自然数n > 1 と整数g, x >= 0 を入力として, g^x をn で割った余りg^x mod n を求めて表 
#  示するプログラムを作成せよ. 
#  

'自然数n > 1 と整数g, x >= 0 を入力として, g^x をn で割った余りg^x mod n を求めて表示する' :-
        '自然数n > 1 と整数g, x >= 0 を入力して、'(_n,_g,_x),
        'g^x をn で割った余りg^x mod nを求めて表示する'(_n,_g,_x,_余り),
        writef('%t = %t^%t mod %t\n',[_余り,_g,_x,_n]). 

'自然数n > 1 と整数g, x >= 0 を入力して、'(_n,_g,_x) :-
        '自然数n > 1 と'(_n),
        '整数g>=0'(_g),
        '整数x>=0'(_x).

'自然数n > 1 と'(_n) :-
        write('1より大きい自然数を入力してください : '),
        get_line(Line),
        '1より大きい自然数の入力診断'(Line,_n),!.
'自然数n > 1 と'(_n) :-
        '自然数n > 1 と'(_n).

'1より大きい自然数の入力診断'(Line,_n) :-
        atom_to_term(Line,_n,_),
        integer(_n),
        _n > 1,!.
'1より大きい自然数の入力診断'(Line,_n) :-
        writef('入力された%tから1より大きい自然数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'整数g>=0'(_x) :-
        write('0以上の整数を入れてください : '),
        get_line(Line),
        '0以上の整数入力診断'(Line,_g),!.
'整数g>=0'(_x) :-
        '整数g>=0'(_x).

'整数x>=0'(_x) :-
        write('0以上の整数を入れてください : '),
        get_line(Line),
        '0以上の整数入力診断'(Line,_x),!.
'整数x>=0'(_x) :-
        '整数x>=0'(_x).

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

'g^x をn で割った余りg^x mod nを求めて表示する'(_n,_g,_x,_余り) :-
        _余り is truncate(_g ^ _x) mod _n.