递归写法
// 递归写法
typedef long long ll;
// 这里的x为底数,n为指数,m为取模的基数(有的题目不需要取模,那就将这个去掉即可)
ll binartpow(ll x, ll n, ll m) { // 注意可以提前判断一下m是否为1,因为任何数对1取模都是0
if(n == 0) return 1;
else if(n & 1) {
return x*binarypow(x, n - 1, m) % m;
}
else {
ll temp = binarypow(x, n>>1, m) % m; // 注意原则是“步步取模”
return temp * temp % m;
}
}
迭代写法
// 迭代写法
typedef long long ll;
ll bianarypow(ll x, ll n, ll m) {
ll ans = 1;
x = x % m; // 注意要加上这一句,即先对x取模,因为取模后相乘最后取模是不变的(根据下图运算法则)
while(n) {
if(n&1) ans = ans *

本文介绍了快速幂的递归和迭代写法,并探讨了模运算规则以及不同运算符在CPU时钟消耗上的差异,如加减操作需2个时钟,位运算只需1个,乘法4个,除法高达40个。这对于理解和优化算法性能至关重要。
订阅专栏 解锁全文
1128

被折叠的 条评论
为什么被折叠?



