codeforces 233B Non-square Equation 思维题

来源:互联网 发布:glov卸妆巾 知乎 编辑:程序博客网 时间:2024/06/05 00:51
B. Non-square Equation
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Let's consider equation:

x2 + s(xx - n = 0, 

where x, n are positive integers,s(x) is the function, equal to the sum of digits of numberx in the decimal number system.

You are given an integer n, find the smallest positive integer root of equationx, or else determine that there are no such roots.

Input

A single line contains integer n (1 ≤ n ≤ 1018) — the equation parameter.

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to usecin, cout streams or the%I64d specifier.

Output

Print -1, if the equation doesn't have integer positive roots. Otherwise print such smallest integerx (x > 0), that the equation given in the statement holds.

Examples
Input
2
Output
1
Input
110
Output
10
Input
4
Output
-1
Note

In the first test case x = 1 is the minimum root. Ass(1) = 1 and 12 + 1·1 - 2 = 0.

In the second test case x = 10 is the minimum root. Ass(10) = 1 + 0 = 1 and 102 + 1·10 - 110 = 0.

In the third test case the equation has no roots.

blablabla:

      正常思路当然就是直接枚举x看是否符合条件,但是枚举x计算量太大耗时太长。转变思路便是枚举s(x)的值。需要注意这些值的范围。
我还是应该仔细看看unsigned怎么用。。。

n是10的18次幂   ,x必小于根下x         最大的x=999999999  s(x)=81;所以只需要枚举1到81的s(x);
已知 s(x) 和 n   
用到了个简单的求根公式     

    #include<cstdio>    #include<cmath>    typedef __int64 LL;    int judge(int s)    {        int sum=0;        while(s)        {            sum+=s%10;            s/=10;        }        return sum;    }    int main()    {        LL n;        scanf("%I64d",&n);        double a;        int i,b,flag=1;        for(i=1;i<=81;++i)        {            a=(sqrt(i*i+4*n)-i)/2;            b=(int)a;            if(b==a&&judge(b)==i)            {                printf("%d\n",b);                flag=0;                break;            }        }        if(flag)            printf("-1\n");        return 0;    }





0 0
原创粉丝点击