每日一题——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,可以作为做完第一道题后的练习。
由于是英文,可以参考下我的翻译,但仅供参考昂,请注意,输出的公式翻译有误,请看原来的格式。
题目描述

输入描述

输出描述


浙公网安备 33010602011771号