基本介绍:
bit是度量信息的单位,有0,1两种状态。在程序运行时合理利用位运算能大大降低程序的复杂度。
例题:
x^{y}
求 a的 b 次方对 p 取模的值。
输入格式:
三个整数 a,b,p 在同一行用空格隔开。
输出格式:
输出一个整数,表示 mod p的值。
数据范围:
0 <= a,b <= ,1 <= p <=
输入样例:
3 2 7
输出样例:
2
暴力乘会执行b次乘法,效率过低。
做法:快速幂
根据数学常识,一个正整数可以唯一的表示为若干指数不同的2的k次幂的和(整数的二进制表达)
也就是说如果b在二进制下表式有k位,第i(0<= i <= k)的数字是那么:
因为k = ,所以上式乘积项的数量不多与k=(.....)个。所以运算的效率式很高的
通过公式的展开我们可以得到代码:
#include <bits/stdc++.h>
using namespace std;
int power(int a,int b,int p){
int res = 1;
while(b){
if(b & 1)res = (long long)res * a % p;
a = (long long)a * a % p;
b >>= 1;
}
return res % p;
}
int main(){
int a,b,p;
cin >> a >> b >> p;
cout << power(a,b,p);
return 0;
}