题解:AT_abc420_g [ABC420G] sqrt(n²+n+X)
AT_abc420_g [ABC420G] sqrt(n²+n+X) 题解
题目链接
转至专栏阅读
解题思路
设
将等式两边同乘
配方得:
将左边用平方差展开得:
令
将定义
相加得:
解得:
为了让
因为
综上,我们需要枚举
时间复杂度
参考代码
#include<iostream>
#include<set>
#define int long long
using namespace std;
int x;
set<int> ans;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>x;
int d=4*x-1,p=abs(d);
for(int i=1;i*i<=p;i++){
if(p%i==0){
int j=p/i;
if(d>0){
if((i+j)%4==0){
ans.insert((j-i-2)/4);
ans.insert((i-j-2)/4);
}
}
else{
if((j-i)%4==0){
ans.insert((j+i-2)/4);
ans.insert((-i-j-2)/4);
}
}
}
}
cout<<ans.size()<<'\n';
for(int i:ans) cout<<i<<' ';
return 0;
}
AC 记录