「prolog勉強プロジェクトオイラー131~140」の編集履歴(バックアップ)一覧に戻る
sum([],0):-!. sum([[_,_,_,Perm]|Xs],Result):-sum(Xs,Re),Result is Re+Perm. gcd(0, B, B). gcd(A, B, G) :- A > 0, R is B mod A, gcd(R, A, G). big_swap(A,B,A,B):-A=<B,!. big_swap(A,B,B,A):-!. over(M,N):- Z is 2*M*(M+N), (Z>=10^8;M=<N). calc(M,N,[A1,B1,C1,Perm]):- gcd(M,N,1), 1=:=(M-N) mod 2, A is M^2-N^2, B is 2*M*N, C1 is M^2+N^2, big_swap(A,B,A1,B1), Sa is B1-A1, 0=:= C1 mod Sa, All is A1+B1+C1, Perm is (10^8-1)//All. roopN(M,N,_):- over(M,N),!,fail. roopN(M,N,Result):- calc(M,N,Result). roopN(M,N,Result):- N1 is N+2, roopN(M,N1,Result). roopM(M,Result):- N is (M mod 2)+1, roopN(M,N,Result). roopM(M,Result):- M1 is M+1, not(over(M1,1)), !, roopM(M1,Result). main139:-findall(Re,roopM(2,Re),ABC), write(ABC), sum(ABC,Ans),write(Ans).