Prologの特徴を利用して全探索してみたけれど?
なんか無駄な処理をしている気がする。
gcd(0, B, G) :- G is abs(B).
gcd(A, B, G) :- A =\= 0, R is B mod A, gcd(R, A, G).
perm(A,B,C,U,D):-U is A*10+C,D is B*10+C.
perm(A,B,C,U,D):-U is C*10+A,D is B*10+C.
perm(A,B,C,U,D):-U is A*10+C,D is C*10+B.
perm(A,B,C,U,D):-U is C*10+A,D is C*10+B.
bad(U,D):-U mod 11=:=0,D mod 11=:=0.
ok(U,D):-D<U,not(bad(U,D)).
mult([],1,1):-!.
mult([[X,Y]|Xs],ReX1,ReY1):-
mult(Xs,ReX,ReY),
ReX1 is ReX*X,
ReY1 is ReY*Y.
search([U,D]):-
between(1,9,A),
between(1,9,B),
between(1,9,C),
perm(A,B,C,U,D),
ok(U,D),
gcd(U,D,R1),
gcd(A,B,R2),
U//R1=:=A//R2,
D//R1=:=B//R2.
main:-
findall(E,search(E),Es),
mult(Es,U,D),
write([U,D]),
gcd(U,D,R),
U1 is U//R,
write(U1).
最終更新:2014年12月01日 09:14