平方根
1.平方根(sqrt.pas/c/cpp)
【问题描述】
给出一个正整数n (1<n≤2^31-1),求当x,y都为正整数时,方程 的解中,x最小值为多少?
√n=√x-√y
【输入文件】
输入文件只有一行,一个正整数n。
【输出文件】
输出文件只有一行,即满足条件的最小x的值。
【文件样例】
sqrt.in sqrt.out
4 9
【数据规模】
30%的数据满足1<n≤10000;
100%的数据满足1<n≤2^31-1。
采用极限法
根n=(1+x)根n-x根n
即n=((p+x)/p)根n-x/p根n
上下同除x,然后换元,
n=((t+1)/t)根n-1/t根n
y=n/(t*t);
因为y是整数,t从根n下取整,然后直到n%(t*t)==0,求出t结果也就出来了。
#include<iostream> #include<cmath> using namespace std; int main() { int n; cin>>n; long long p; for(p=sqrt(n);p>=1;p--) if(n%(p*p)==0)break; long long ans=n*(p+1)*(p+1)/(p*p); cout<<ans; return 0; }