分解正整数
2026-05-24 11:18:47
发布于:湖北
1阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);
int k;
cin>>k;
while(k--)
{
long long n,e,d,m,s;
cin>>n>>d>>e; // 修改1:修正输入顺序为 n,d,e
m=n-e*d+2;
s=m*m-4*n;
// 修改2:改进完全平方数判断
if(s<0)
{
cout<<"NO\n";
continue;
}
long long t=sqrt(s);
// 检查 t-1, t, t+1 的平方
bool ok=0;
for(long long i=max(0LL,t-1);i<=t+1;i++)
{
if(i*i==s)
{
t=i;
ok=1;
break;
}
}
if(!ok||(m+t)%2!=0) // 修改3:检查是否能整除2
{
cout<<"NO\n";
continue;
}
// 修改4:直接用公式计算,删除暴力枚举
long long p=(m-t)/2;
long long q=(m+t)/2;
if(p<=0||q<=0||p*q!=n) // 验证
{
cout<<"NO\n";
continue;
}
cout<<min(p,q)<<" "<<max(p,q)<<"\n";
}
return 0;
}
这里空空如也



有帮助,赞一个