【ACWing】89. a^b

题目地址:

https://www.acwing.com/problem/content/description/91/

a a a b b b次方对 p p p取模的值。

输入格式:
三个整数 a , b , p a,b,p a,b,p,在同一行用空格隔开。

输出格式:
输出一个整数,表示 a b m o d    p a^b \mod p abmodp的值。

数据范围:
0 ≤ a , b ≤ 1 0 9 0≤a,b≤10^9 0a,b109
1 ≤ p ≤ 1 0 9 1≤p≤10^9 1p109

思路是快速幂。但是这里要注意 b = 0 , p = 1 b=0,p=1 b=0,p=1的情况,需要将 p = 1 p=1 p=1的情况判掉。快速幂可以参考https://blog.csdn.net/qq_46105170/article/details/116353002。代码如下:

#include <iostream>
using namespace std;

int main() {
    
    
    long a, b, p;
    cin >> a >> b >> p;
    
    if (p == 1) puts("0");
    else {
    
    
        long res = 1;
        while (b) {
    
    
            if (b & 1) res = res * a % p;
            a = a * a % p;
            b >>= 1;
        }
        
        cout << res << endl;
    }
    
    return 0;
}

时间复杂度 O ( log ⁡ b ) O(\log b) O(logb),空间 O ( 1 ) O(1) O(1)

猜你喜欢

转载自blog.csdn.net/qq_46105170/article/details/120837483
今日推荐