質問: n){cout << i << endl;break;} } } } } と書いたところ、pkuで main.cpp f:\temp\11386803.6056\main.cpp(15) : error c2668: 'sqrt' : ambiguous call to overloaded function math.h(581): could be 'long double sqrt(long double)' math.h(533): or 'float sqrt(float)' math.h(128): or 'double sqrt(double)' while trying to match the argument list '(int)' f:\temp\11386803.6056\main.cpp(16) : error c2108: subscript is not of integral type というコンパイルエラーがでます。 sqrtの前後で型が違っているのは分かるのですが、具体的にどうなおせばよいかわかりません。
回答: sqrtの引数の型をdoubleに変えるために、 for ( int i=2; i<=sqrt((double)max)+1; i++ ) でエラーは解消できますが、sqrtを使わないで for ( int i=2; i*i<=max; i=i+1 ) とした方が、整数の演算だけになるので打切り誤差の心配(1を加えて保険をかけている)をしなくて済みます。 ついでに、内側のforループは for ( int j=i*i; j