来一篇 O ( 1 ) O(1) O(1)的题解
题目可以转化为求最小的 x x x使得下式成立。
a ∗ 3 x > b ∗ 2 x a*3^x>b*2^x a∗3x>b∗2x
继续转化
3 x 2 x > b a \frac{3^x}{2^x}>\frac{b}{a} 2x3x>ab
即:
( 3 2 ) x > b a (\frac{3}{2})^x>\frac{b}{a} (23)x>ab
那么如何求最小的 x x x呢?
可以先求
( 3 2 ) x = b a (\frac{3}{2})^x=\frac{b}{a} (23)x=ab
这里的 x x x就是 l o g 3 2 b a log_{\frac 32}\frac ba log23ab
我们只要向下取整再加上 1 1 1就好啦
还有一个问题: c c c++没有 l o g 3 2 log_{\frac 32} log23怎么办?
没关系!换底公式 , 出现!
l o g n m = l o g a m l o g a n log_n m=\frac{log_a m}{log_a n} lognm=loganlogam
这时就可以用 c c c++自带的 l o g log log函数啦(应该是以 e e e为底的)
在 c m a t h cmath cmath库里哦!
代码奉上!
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int a,b;cin>>a>>b;
double n=1.5,m=1.0*b/a;
cout<<int(log(m)/log(n))+1;
return 0;
}