每日一题——a^b

题目

a^b

题解

首先看这题是让我们求a的b次方并对结果去余,如果是按照循环去做的话那么肯定时间复杂度O(b)太大了(b最大到1e+9),所以这里就要想办法把时间缩少,既然一个个循环着相乘不行,我们是否可以一次乘多个呢,这里就用到了快速幂的做法了,很显然这题是个快速幂模板。理论成立,代码开始。

参考代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a, b, p;
ll pow(ll a, ll b, ll p){
    ll res = 1 % p;
    while(b){
        if(b & 1) res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return res;
}
int main(){
    cin >> a >> b >> p;
    cout << pow(a, b, p) <<endl;
    return 0;
}

再来一题

同理 运用快速幂知识可以解决下面这道题Raising Modulo Numbers,可以作为做完第一道题后的练习。
由于是英文,可以参考下我的翻译,但仅供参考昂,请注意,输出的公式翻译有误,请看原来的格式。

题目描述

题目描述

输入描述

输入描述

输出描述

输出描述

posted @ 2025-03-03 15:57  PZnwbh  阅读(10)  评论(0)    收藏  举报