09/12/24 15:59:46
>>38
% Prolog
辺の和が3以上1000以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(Min,Max,_辺1,_辺2,_辺3) :-
辺の和がMin以上Max以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(3,1000,_辺1,_辺2,_辺3).
辺の和がMin以上Max以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(Min,Max,_辺1,_辺2,_辺3) :-
findall(N2,(for(1,N,Max),N2 is truncate(N*N)),L1),
findmax([_面積,A,B,C],(for(1,N1,Max),辺の和がMin以上Max以下の直角三角形の面積(N1,Min,Max,L1,_面積,A,B,C)),[_,_辺1,_辺2,_辺3]).
辺の和がMin以上Max以下の直角三角形の面積(N,Min,Max,L1,_面積,A1,N,B1) :-
N2 is N * N,
member(A,L1),
U is truncate(A + N2),
member(U,L1),
A1 is sqrt(A),
C is sqrt(U),
Sum is truncate(A1 + N + C),
Sum >= Min,
Sum =< Max,
_面積 is A1 * N / 2.