gpt4 book ai didi

c++ - 给定一个数 N,有多少对数的平方和小于或等于 N?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:39 26 4
gpt4 key购买 nike

让我们将 F(N) 定义为不同正整数对的数量 (A,B) 使得 A2+B2≤NA

如果 N=5 唯一可能的这样的对是 (1,2) 对于 N=10 对是两个:(1,2)(1,3)

此外我们有 F(13)=3, F(17)=4, F(17)=4, F(20)=5, F(20)=5, F(25)=6, F(100)=31 依此类推,每个数字都是两个不同的非零平方和。

到目前为止,我有以下解决方案:

long long SOLVE(lld n)
{
long long x=sqrt(n),up=0;
long long a=x,b=1;
while(abs(a-(b-1))!=1)
{

while(sqr(a)+sqr(b)<=n )
{
b++;
}
up+=(b-1);
a--;
}
b--;
up+=(b*(b+1))/2;
return up;
}
int main()
{
cout<<number(100);
return 0;
}

相同的数字不可数,因此 (1,1)(2,2) 是无效的元组。相同的组合但不同的顺序只计算一次。因此 (1,2)(2,1) 只算一次。

但是由于N的范围是1,我需要一个更有效的算法或公式来计算这个。有什么技巧可以让我的代码更有效率吗?

最佳答案

在伪代码中:

int count=0;
for (smaller=1; ;++smaller)
{
maxlarger = floor(sqrt(N-smaller*smaller));
if (maxlarger <= smaller)
break;
count+=(maxlarger-smaller);
}
return count;

关于c++ - 给定一个数 N,有多少对数的平方和小于或等于 N?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34455906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com