平方根

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;
}
原文地址:https://www.cnblogs.com/war1111/p/7532360.html