我正在尝试这个问题, http://www.spoj.pl/problems/TWOSQ/。我们必须找到将数字(大至 10^15)表示为平方和的不同方式的数量(不计算两次,即 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;
}