一、基本思想
- 可以在
O(log k)时间内
解决a的k次方 % p结果,a,p, k均可以在10的九次方范围内 - 把k拆成二进制形式
二、一道模板题
题目链接
题目描述:
给定n组ai,bi,pi,对于每组数据,求出ai的bi次方 mod pi的值。
输入格式
第一行包含整数n。
接下来n行,每行包含三个整数ai,bi,pi。
输出格式
对于每组数据,输出一个结果,表示ai的bi次方 mod pi的值。
每个结果占一行。
数据范围
1≤n≤100000,
1≤ai,bi,pi≤2∗109
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
int n;
int qni(int a, int k, int p){
int res = 1;
while(k){
if(k & 1) res = (LL)res * a % p;
k >>= 1;
a = (LL)a * a % p;
}
return res % p;
}
int main(void){
scanf("%d", &n);
while(n --){
int a, k, p;
scanf("%d%d%d", &a, &k, &p);
printf("%d\n", qni(a, k, p));
}
return 0;
}