私はこの問題を試していました、 http://www.spoj.pl/problems/TWOSQ/。数(10 ^ 15まで)を二乗和として表現するさまざまな方法の数を見つける必要があります(2回カウントせずに、つまり5 ^ 2 + 1^2と1^2 + 5 ^ 2は同じです) 。私は以前にこのタスクを見たことがあり、これが私が以前にそれを解決した方法でもありました。私は裁判官に間違った答えを得続けます。誰かが理由を教えてもらえますか?または、まったく別のアプローチを提案します。理解のために必要に応じてコメントを追加しました。前もって感謝します!。
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long X;
cin >> X;
const double EPS = 1e-6;
long long int count = 0;
// add EPS to avoid flooring x.99999 to x
for (int a = 0; a <= sqrt(X/2) + EPS; a++)
{
long long int b2 = X - a*a; // b^2
long long int b = (long long int) (sqrt(b2) + EPS);
if (abs(b - sqrt(b2)) < EPS) // check b is an integer
count++;
}
cout << count << endl;
}