换底公式
但是这样得话,由于计算机double处理会缺少精度
ex:
int a=2,b=8;
(int)log(b)/log(a)!=3,而是等于2;这里得问题就是精度得缺少
解决方案(int)(log(b)/log(a)+0.5),这里用四舍五入得方法保证绝大多数正确答案
优点O(1)时间复杂度
这样的方法我提交CF的代码,也过了,但是目前自己无法证明这个公式绝对正确,但是CF过了,就能保证的是绝大数数据没问题。
暴力算法
int log(int a,int b)
{
int sum=0;
while(b/a)
{
b/=a;
sum++:
}
return sum;
}
优点:保证答案的正确性
缺点:O(loga(b))时间复杂度