三角形の辺がX軸Y軸にある場合。
片方だけが軸状にある場合。
両辺がXY軸状にない場合で、一辺が決まった場合。
で場合わけして計算するだけです。
gcd(0, B, B).
gcd(A, B, G) :- A > 0, R is B mod A, gcd(R, A, G).
min(A,B,A):-A<B,!.
min(_,B,B):-!.
calc(Count):-
between(1,50,X),
between(1,50,Y),
gcd(X,Y,G),
X1 is X//G,
Y1 is Y//G,
C1X is X//Y1,
C1Y is (50-Y)//X1,
min(C1Y,C1X,C1),
C2X is (50-X)//Y1,
C2Y is Y//X1,
min(C2X,C2Y,C2),
Count is C1+C2.
sum([],Sum,Sum):-!.
sum([X|Xs],Sum,Result):-
Sum1 is Sum+X,
sum(Xs,Sum1,Result).
main:-
TypeA is 50*50*2,
TypeB is 50*50,
findall(E,calc(E),Es),
sum(Es,0,Ans),
Ans1 is Ans+TypeA+TypeB,
write(Ans1).
最終更新:2014年12月19日 09:33