划水摸鱼。。。唔唔唔好困。。。被课内D爆 惨啊
这题就是k^2-1=n*d 求k的解嘛
变形一下 (k+1)(k-1)=n*d
分解一波质因数,我们可以搞成k+1=n1*d1,k-1=n2*d2
枚举一下乱搞就好
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> #include<set> using namespace std; typedef long long LL; set<LL>s; set<LL> :: iterator it; int ylen;LL yue[110000]; int main() { LL n; scanf("%lld",&n); if(n==1){printf("None ");return 0;} for(LL i=1;i*i<=n;i++) if(n%i==0)yue[++ylen]=n/i; s.insert(1); for(int i=1;i<=ylen;i++) for(int j=1;yue[i]*j-1<=n;j++) { if((yue[i]*j+2)%(n/yue[i])==0&&yue[i]*j+1<=n)s.insert(yue[i]*j+1); if((yue[i]*j-2)%(n/yue[i])==0&&yue[i]*j-1>=0)s.insert(yue[i]*j-1); } for(it=s.begin();it!=s.end();it++)printf("%lld ",*it); return 0; }