【发布时间】:2018-12-04 19:35:08
【问题描述】:
我正在尝试解决一个编程问题,我必须显示不等式x² + y² < n 的正整数解的数量,其中n 由用户给出。我已经编写了一个似乎可以工作但没有我想要的那么快的代码。有什么办法可以加快速度吗?
我当前的代码:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long n, i, r, k, p, a;
cin >> k;
while (k--)
{
r = 0;
cin >> n;
p = sqrt(n);
for (i = 1; i <= p; i++)
{
a = sqrt(n - (i * i));
r += a;
if ((((i * i) + (a * a)) == n) && (a > 0))
{
r--;
}
}
cout << r << "\n";
}
return 0;
}
编辑:
这是this task 的解决方案。
英文任务:
求不等式x²+y² < n 的自然解(x≥1, y≥1) 的数量,其中0 < n < 2147483647。例如,n=10 有 4 个解决方案:(1,1), (1,2), (2,1), (2,2)。
输入
在输入的第一行中,给出了测试用例的数量k。在接下来的k 行中,给出了n 值。
输出
在输出中,您必须在单独的行中显示不等式的自然解的数量。
示例
输入:
2
10
11
输出:
4
6
【问题讨论】:
-
这里
k的目的是什么?n呢?正确命名变量总是一个好习惯 -
关于代码有效但您认为可以改进的问题应该问at Code Review。请注意,我已将您链接到如何询问页面。在发布之前,您有责任阅读他们对问题的期望。
-
Your rubber duck 想知道为什么,如果你只使用
i * i,你会为p = sqrt(n);而烦恼? -
暂时意识到 sqrt 返回一个双精度数,您将其强制分配给 long long ...如果您剽窃了此代码,那么您可以将其归咎于您以外的其他人。我把你的代码修好了一点(摆脱了长长的),它运行得很快……你所说的“加速”是什么意思? “k”有什么作用?该程序的用户应该如何知道如何使用它?看代码的人应该如何知道预期用途是什么?
-
我已经添加了您询问的详细信息。
标签: c++ geometry inequality