130. 非平方等式
題目描述
考慮等式:
x2 + s(x)·x - n = 0,
其中x,n是正整數,s(x)是個函數,其值等於x在十進制下所有數字的和。
現給出整數n的大小,請你求出最小的滿足條件的正整數x。
輸入格式
輸入僅包含一個整數n (1 ≤ n ≤ 1018) .
輸出格式
如果不存在這樣的x,請輸出-1;否則請輸出滿足條件的最小的整數x (x > 0)
輸入樣例
輸出樣例
#include<iostream>
#include<cmath>
using namespace std;
long long getval(long long tmp)
{
long long ans=0;
long long t=tmp;
while(tmp)
{
ans+=tmp%10;
tmp/=10;
}
ans=ans*t+t*t;
return ans;
}
int main()
{
/*for(long long i=1;i<=1000;i++)
{
cout<<getval(i)<<" ";
if(i%10==0) cout<<endl;
}*/
long long n;
while(cin>>n)
{
long long l=1;
long long r=sqrt(n);
long long mid;
int flag=0;
while(l<=r)
{
mid=(l+r)/2;
if(getval(mid)==n)
{
break;
}
if(getval(mid)<n)
l=mid+1;
else
r=mid-1;
}
long long mi=mid-100000;
if(mi<1) mi=1;
long long ma=mid+100000;
if(ma>sqrt(n)) ma=sqrt(n);
for(long long i=mi; i<=ma; i++)
{
if(getval(i)==n)
{
flag=1;
cout<<i<<endl;
break;
}
}
if(!flag)
cout<<"-1"<<endl;
}
return 0;
}