このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1274827528/424
#  【質問テンプレ】 
#  [1] 授業単元:C言語課題 
#  [2] 問題文(含コード&リンク):2つの正の整数(aとb)の最大公約数をユークリッドの互除法を用いて表示するプログラムを作成せよ。ただし、0<b≦a≦32767とする。 
#                 ≪ユークリッドの互除法≫ 
#                 ユークリッドの互除法による最大公約数(GREATEST COMMON DIVISOR:GCD)は、次のように求める。 
#                 2数(aとb)の中で大きい値をl、小さい値をmとする。 
#                 ■譴鬘蹐燃笋蝓△△泙蠅鬘鬚箸垢襦 
#                        r=0ならば、mが最大公約数となる。 
#                        r≠0(0<r<m)ならばl←m、m←r として再び△僚萢を行う。 
#  

ユークリッドの互除法による最大公約数(N1,N2,X) :-
    length(L1,N1),
    length(L2,N2),
    ユークリッドの互除法とならび演算による最大公約数(L1,L2,L),
    length(L,X).

ユークリッドの互除法とならび演算による最大公約数(L1,L2,L) :-
    append(_,L2,L1),
    ならび剰余算(L1,L2,R),
    ユークリッドの互除法とならび演算による最大公約数(L1,L2,R,L),!.    
ユークリッドの互除法とならび演算による最大公約数(L1,L2,L) :-
    append(_,L1,L2),
    ユークリッドの互除法とならび演算による最大公約数(L2,L1,L).

ユークリッドの互除法とならび演算による最大公約数(_,L2,[],L2) :- !.
ユークリッドの互除法とならび演算による最大公約数(L1,L2,R,L) :- ユークリッドの互除法とならび演算による最大公約数(L2,R,L).

ならび割り算(L1,L2,Div,Mod) :-
        ならび割り算(L1,L2,[],Div,Mod).

ならび割り算(L1,L2,Div,Div,L1) :- append([_|_],L1,L2),!.
ならび割り算(L1,L2,L4,Div,Mod) :-
        append(L2,L3,L1),
        ならび割り算(L3,L2,[_|L4],Div,Mod).


ならび剰余算(L1,L2,L1) :- append([_|_],L1,L2).
ならび剰余算(L1,L2,L) :- append(L2,L3,L1),ならび剰余算(L3,L2,L).

/*
ならび割り算(L1,L2,X) :- ならび割り算(L1,L2,[],X).

ならび割り算(L1,L2,L,L) :- append([_|_],L1,L2),!.
ならび割り算(L1,L2,L4,L) :- append(L2,L3,L1),ならび割り算(L3,L2,[_|L4],L).
*/