快速幂

来源:互联网 发布:简历java电商项目经验 编辑:程序博客网 时间:2024/06/07 02:40

核心思想是二进制转十进制
比如需要求 a11
11的二进制表示为1011

11=231+220+211+201

a11=a23a21a20

运用位运算,就可以方便地快速幂
代码是对某一个数取模,洛谷上有相应的模板题

#include <cstdio>#include <iostream>using namespace std;typedef long long LL;LL b, p, k, ans = 1;LL fpower(LL b, LL p, LL k) {    for(; p; p >>= 1, b = ((b%k)*(b%k))%k)        if(p&1)            ans = ((ans%k)*(b%k)) % k;    return ans % k;}int main() {    cin >> b >> p >> k;    cout << fpower(b, p, k);    return 0;}

时间复杂度大概达到O(logn)

原创粉丝点击