本文主要是介绍快速幂(基础算法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 目的
- 基本例子
- 暴力代码
- 思路讲解
- 优化(即快速幂)
- 位运算写法(终极优化)
目的
减小时间复杂度
基本例子
a的b次方,最后取模
暴力代码
long long ans=1;
long long a,b;
for(long long i=1;i<=b;i++)
{ans*=a;
}
ans%=c;
当数据大的时候就不行了
思路讲解
3¹⁰=(3²)⁵= 9⁵ =9×(9² × 9²) = 9×81²
3¹⁰=9⁵=9×81²
a的平方的b/2次幂等于a的b次幂,奇数的时候先乘以a;
优化(即快速幂)
long long quickmi(long long a,long long b,long long c)
{long long ans=1;a%=c;while(b){if(b%2==1)//奇数特判{ans=ans*a%c;)a=a*a%c;b/=2;}return ans;
}
位运算写法(终极优化)
long long quickmi(long long a,long long b,long long c)
{long long ans=1;a%=c;//直接取模防止数太大while(b){if(b&1)//与运算最后一位是1就说明是奇数{ans=ans*a%c;)a=a*a%c;b>>=1;//二进制右移一位相当于除以2}return ans;
}
这篇关于快速幂(基础算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!