>>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.