1 条题解
-
0
题目分析
若 ,答案显然为 。
若 ,设序列的第 项为平方数,则存在正整数 ,使得 ,于是 ,于是枚举 的所有不超过 的正因数 ,那么就可以令 ,解得 ,最后取所有 的最小值即可。
若 ,设序列的第 项为平方数,则存在正整数 ,使得 ,于是 ,于是枚举 的所有不超过 的正因数 ,那么就可以令 ,解得 $y = \left| k \right| \div i - (i + \left| k \right| \div i) \div 2$,最后取所有 的最小值即可。注意这里不令 的原因是这种情况下解得 ,但这是负数(因为 )。
注意判断无解。时间复杂度为 。
参考代码
#include<iostream> #define int long long using namespace std; int k; signed main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>k; if(k==0) cout<<0; else if(k>0){ int ans=1e18; for(int i=1;i*i<=k;i++){ if(k%i==0){ if((i+k/i)%2==0) ans=min(ans,(i+k/i)/2); } } if(ans==1e18) cout<<"none"; else cout<<ans; }else{ k*=-1; int ans=1e18; for(int i=1;i*i<=k;i++){ if(k%i==0){ if((i+k/i)%2==0) ans=min(ans,k/i-(i+k/i)/2); } } if(ans==1e18) cout<<"none"; else cout<<ans; } return 0; }
- 1
信息
- ID
- 10285
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者