I SQRT
Accept:48 | Submit:100 |
Time Limit:1000MS | Memory Limit:65536KB |
Description
There is a positive integer N, and please give us the smallest root x of equation sqrt(N)=sqrt(x)-sqrt(y) when x and y are both positive integer.
Input
There are several test cases and end by EOF.
Each line contain a positive integer N, 1<N≤2^31-1.
Output
There is only one line for each test case.
The line contains only one integer indicate the smallest x which meet the above conditions.
Sample Input
4
536
Sample Output
9
1206
/*
数学题,转化:n + y + 2sqrt(n*y) = x;
当 n*y 最小,则 x 整数最小
*/
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
void fan(long long n){
long long y=1,m=n;
for(int i=2;i*i<=n;i++){
int ans=0;
while(n%i==0){ ans++; n/=i; }
if(ans && (ans%2)) y*=i;
}
if(n>1) y*=n;
long long sum;
sum= m + y + (long long)sqrt(m*y*4.0);
cout<<sum<<endl;
}
int main(){
long long n;
while(cin>>n){
fan(n);
}
}