快速幂题目列表
快速幂
- 认识快速幂
所谓的快速幂,表示的是快速的计算一个数的幂次,使用的是分治的思想,举个例子:
我们要求的是2^105,那么正常的求幂次的方法的时间复杂度是105次,采用幂次之后可以把105写成二进制1101001,那么105可以写成2^0 + 2^3 + 2^5 + 2^6,只要循环6次即可算出答案,又因为一般的答案会很大所以会有一个取模的操作,一定要每一步的乘积都要取模。 - 代码:
int quickpow(int a, int n) { int ans = 1; while(n) { if(n & 1) { //表示二进制最后一位是1,这里的a表示的是a对应的次方 ans = (ans * a) % mod; } a = (a*a) % mod; n = n >> 1; } }
快递幂
- 代码:
#include <iostream> using namespace std; typedef long long ll; ll quickpow(ll a, ll n, ll mod) { ll ans = 1; a = a % mod; while(n) { if(n & 1) { ans = (ans * a) % mod; } a = (a * a) %mod; n = n >> 1; } return ans; } int main() { ll b, p, k; cin >> b >> p >> k; ll ans = quickpow(b, p, k); cout << ans % k; }

浙公网安备 33010602011771号