09/12/24 15:14:15
>>38
% Prolog これで動くか?
辺の和が3以上1000以下の直角三角形の個数を求める(Min,Max,_個数) :-
辺の和がMin以上Max以下の直角三角形の個数を求める(3,1000,_個数).
辺の和がMin以上Max以下の直角三角形の個数を求める(Min,Max,_個数) :-
findall(N2,(for(1,N,Max),N2 is truncate(N*N)),L1),
count((for(1,N1,Max),辺の和がM以下の直角三角形(N1,Min,Max,L1,Sum)),_個数).
辺の和がM以下の直角三角形(N,Min,Max,L1,Sum) :-
N2 is N * N,
member(A,L1),
U is truncate(A + N2),
member(U,L1),
Sum is truncate(sqrt(A) + sqrt(U) + N),
Sum >= Min,
Sum =< Max.