目前知识有限,就现在看,做题经常用两种吧,一个是快速幂,因为a的b次幂很大,可能会爆,就需要把b分成许多个小数,比如10的32次幂,就可以写成10的平方的平方的平方的平方的平方,用while循环就可以实现了,就不怕这个大数存不下了
另一个就是数学上的两边往中间取的,这个很常见,比如在0到100间取值,想找32,就可以用0和100的中间数50当作另一边了,就是在0到50就行了,在25到50,依次就行了,缩小范围,减少时间。
以后我还会再补充。
快速幂
int fun(int a,int b)
{
int ans=1;
while(b)
{
if(b&1)//把b换成二进制,最后一位数字是1
ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=1;//右移一位
}
return ans;
}
二分就容易了,定义两个端点,让中间值=两端点和的一半,mid>值,右端点换成mid,或mid-1,因题而异
不执行的话就返回0或-1.
浙公网安备 33010602011771号