E.Square

数学题

题目大意

对于给定的整数 x109x\le 10^9 ,找到一个 y109y\le 10^9 ,使得存在一个整数 kk,使得 xxy2y^2 的前 kk

如果不存在这样的 yy ,输出 1-1

解题思路

题目给定了一个定义式:y210k=x\lfloor \dfrac{y^2}{10^k} \rfloor = x

可以将其化解为不等式:

alt

其中 xx 是确定的,只需遍历 kk 对应的 y=sqrt(10kx)+1y=sqrt(10^k x)+1 ,判断即可

参考程序

void solve()
{
    ll x;
    cin >> x;
    ll t=sqrt(x);
    if(t*t==x){
        cout << t << endl;
        return ;
    }
    ll p=1;
    while(1){
        p*=10;//表示10^k
        t=sqrt(p*x);
        if(t*t<t*n) t++;
        if(t>1e9){
            cout << "-1" << endl;
            return ;
        }
        if((t*t)/p==x){
            cout << t << endl;
            return ;
        }
    }
}