一道数论题——平方根

题目就是给出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;
} 

猜你喜欢

转载自blog.csdn.net/hzk_cpp/article/details/80429913