换底公式
但是这样得话,由于计算机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
))时间复杂度