「プロジェクトオイラー問26」の編集履歴(バックアップ)一覧に戻る
modPow(_,0,Result,_,Result):-!. modPow(P,R,Mult,Pow10,Result):- R mod 2=:=1, !, R1 is R//2, Mult1 is (Mult*Pow10) mod P, Pow10_1 is (Pow10^2) mod P, modPow(P,R1,Mult1,Pow10_1,Result). modPow(P,R,Mult,Pow10,Result):- !, R1 is R//2, Pow10_1 is Pow10^2, modPow(P,R1,Mult,Pow10_1,Result). min(A,B,A):-A<B,!. min(_,B,B):-!. min_search([X],X):-!. min_search([X|Xs],Result):- min_search(Xs,Re), min(X,Re,Result). yakusu(N,P,P):-N mod P=:=0. yakusu(N,P,P1):-N>P*P,N mod P=:=0,!,P1 is N//P. ok_yakusu_list(N,R):- NM is N-1, between(1,NM,Div), Div2 is Div^2, (NM < Div2 ->!,fail;true), yakusu(NM,Div,R), modPow(N,R,1,10,Amari), Amari=:=1. max_yakusu([MinY,N]):- between(2,999,N), findall(Y,ok_yakusu_list(N,Y),Ys), min_search(Ys,MinY). main26:- findall(X,max_yakusu(X),Xs), sort(Xs,Xs1), write(Xs1).