题目就是给出n,(用sqrt代替根号运算)求sqrt(n)=sqrt(x)-sqrt(y)中x的最大值.
对于给定的n,不论这个数是素数还是合数,都能拆分为n=p*p*q的形式.
当然得让p最大的时候,y就为q.
那么x=(p+1)*(p+1)*q.
于是sqrt(n)=(p+1)*sqrt(q)-sqrt(q)=p.
n最大,相应的x也就最大.
那么就可以直接暴力枚举p(因为p的范围肯定是1~sqrt(n)),求出x.
代码如下:
#include<bits/stdc++.h> using namespace std; long long n,p,q; inline void into(){ scanf("%lld",&n); } inline void work(){ for (p=sqrt(n);p>=1;p--) if (n%(p*p)==0) { q=n/p/p; break; } } inline void outo(){ printf("%lld\n",(p+1)*(p+1)*q); } int main(){ into(); work(); outo(); return 0; }