牛客小白月赛71 - C

C.猫猫与数列

可以猜测,答案应当很小,所以可以直接暴力判断最大的n
首先我们可以走两种路:
第一种,利用求对数来比较,注意精度问题即可,但我感觉这里的快速幂会溢出嘛?

while(1){
	a=qpow(x,y);
	if(y*log(x)>log(maxm)+1e-5) break;
	++c;
	x=y;y=a;
}
cout<<c<<"\n";

第二种做法,快速幂时判断是否超出(-1判断),个人更喜欢第二种方法

ll qpow(ll a,ll b){
    ll r=1;
    while(b){
        if(b&1){
            if(r>maxm/a)
                return -1;
            r=(r*a);
        }
        b>>=1;
        if(b&&a>maxm/a)
            return -1;
        a=(a*a);
    }
    return r;
}
posted on 2023-04-21 22:05  Qiansui  阅读(12)  评论(0编辑  收藏  举报