Project Euler 39
辺の長さが{a,b,c}と整数の3つ組である直角三角形を考え, その周囲の長さをpとする. p = 120のときには3つの解が存在する: {20,48,52}, {24,45,51}, {30,40,50} p < 1000 で解の数が最大になる p を求めよ.
Mathematica
ans = Table[0, {i, 1000}]; For[a = 1, a <= 1000, a++, For[b = a, b <= 1000, b++, c = Sqrt[a^2 + b^2]; p = a + b + c; If[IntegerQ[c] && p < 1000, ans[[p]]++] ] ] Position[ans, Max[ans]]
ループ回数が 1000×1000/2 はもう少し同値な関係によって減らせるような気もしますが。
C/C++
#include <iostream> using namespace std; int main(){ int c, count; int maxp=0, maxcount=0; for(int p=1 ; p<= 1000 ; p++){ count=0; for(int a=1 ; a<p ; a++){ for(int b=a+1 ; b<p ; b++){ c = p - a - b; if(c<=0) break; if(c*c == a*a + b*b) count++; } } if(maxcount < count){ maxcount = count; maxp = p; } } cout << "Finish" << endl; cout << maxp << endl; int end; cin >> end; }
問題を読み間違えていていらない苦労をしてしまった。