快速幂之a^b%p
求 a 的 b 次方对 pp 取模的值。
输入格式
三个整数 a,b,p ,a,b,p 在同一行用空格隔开。
输出格式
输出一个整数,表示a^b mod p的值。
数据范围
0≤a,b≤1e9 0≤a,b≤1e9
1≤p≤1e9 1≤p≤1e9
输入样例:
3 2 7
输出样例:
2
思路:
这道题目给出的数据范围是1e9,当然如果我们进行暴力乘的话肯定是溢出的
在解答本题之前我们先学习一下快速幂的一些基本知识
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高
例如: 求 3 的 7 次方对 7的取模
当 3 ^ 1 = 3
3 ^ 2 = 9
3 ^ 3 = 3^1 * 3^2
3 ^ 4 = (3^2)^2
代码:
#include<bits/stdc++.h> using namespace std; int main(){ int a,b,p; cin>>a>>b>>p; int res=1 % p; // 结果 while(b){ if(b & 1){ // 如果此时b为奇数,就进行乘处理 res = res* 1ll * a % p; } a = a * 1ll * a %p; // a 变为原来的两倍 b >>= 1; // 将 b 左移一位,相当于系数除以2 } cout << res << endl; return 0; }

浙公网安备 33010602011771号