BUPT OJ 非平方等式

来源:互联网 发布:淘宝3000多的实体娃娃 编辑:程序博客网 时间:2024/05/22 05:17

纯粹数学题。如果无脑直接枚举肯定超时。

所以我就超时了。。。

后来分析了一下。

x^2+s(x)*x-n=0,能拆开成 x*(x+s(x))=n的形式,由于n小于10^18次方,x最大s(x)=162,所以能够得到不等式  sqrt(n)-162<=x<=sqrt(n);

剩下的就没啥了

/*USER_ID: test#bupt_wcyPROBLEM: 130SUBMISSION_TIME: 2017-01-26 21:04:55*/#include<iostream>#include<cmath>using namespace std;long long s(long long x){    long long temp=0;    while(x)    {                temp+=x%10;       x=x/10;             }      return temp;     }int main(){    long long n;    while(cin>>n)    {        long long RootOfN=sqrt(n);        long long u=RootOfN-200>0?RootOfN-200:1;        for(long long x=u;;x++)        {            if(x==sqrt(n-s(x)*x))            {            cout<<x<<endl;break;            }            if(x>RootOfN){                cout<<"-1\n";                break;            }        }             }      }


0 0