快速幂
1.c++里面的<math>有pow(double a, double b)求a^b
a.不建议计算整数,最好计算浮点数
b.速度是log(b)
c.当a,b都为整数,b>10^8时,建议自己手写“优化的快速幂”
d.当b为负数时也建议用pow,而不是手写
2.二分快速幂
pw1是递归快速幂
pw2是循环快速幂(解析里面还有简易写法)
#include<iostream> using namespace std; long long pw(int a, int b, int k) { long long res = 1; while(b) { if(b & 1) { res = res * a % k; } b >>= 1; a = 1LL * a*a%k; } return res; } int main() { int a, b, k; cin >> a >> b >> k; cout << a<<"^"<<b<<" mod "<<k<<"="<<pw(a, b, k); }
注 :a给的范围是2^31(int),那么a*a就会直接越界,所以不行,要用1LL*a*a或者long long

浙公网安备 33010602011771号