一,快速幂计算
思想:板子题,记住fastpow()函数怎么写就行
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
//快速幂
long long fastpow(long long base, long long power, long long mod) {
long long sum = 1;
while (power) {
if (power % 2) sum = sum * base % mod;//指数为奇数时
base = base * base % mod;
power /= 2;
}
return sum;
}
int main()
{
int T;
cin >> T;
while (T--) {
long long a, b, mod;
cin >> a >> b >> mod;
cout << fastpow(a, b, mod) << endl;
}
return 0;
}
二,快速幂求解逆元
思想:关于逆元这个东西我不是很懂,这里先挖个坑,后期填上(CSDN)
AC代码
#include <iostream>
using namespace std;
typedef long long LL;
LL qmi(int a, int b, int p)
{
LL res = 1;
while(b){
if(b & 1) res = res * a % p;
a = (LL)a * a % p;
b >>= 1;
}
return res;
}
int main()
{
int n; cin >> n;
while(n --){
int a, p;
cin >> a >> p;
if(a % p == 0) puts("impossible");
else cout << qmi(a, p - 2, p) << endl;//理论上就是a^(p-2)%mod
}
return 0;
}