啊 写这个模板是源于一个悲伤的考试…
- 基本介绍
- 模板题目
- 代码实现
基本介绍
快速幂就是快速计算一个数的多少次幂 意思很好理解
思路就是 n^k拆成 n^k/2*n^k/2
说一下优化:当我们知道了n^k/2的时候 就不用再去递归求另一个n^k/2 直接存一下就好
核心代码
int quick(int num)
{
if(num==0){
return 1;
}
int tmp=quick(num/2);
tmp=(tmp*tmp);
if(num%2==1){
tmp=(tmp*b);
}
return tmp;
}
模板题目
题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。
输入输出格式
输入格式:
三个整数b,p,k.
输出格式:
输出s
s为运算结果
输入输出样例
输入样例:
2 10 9
输出样例:
7
代码实现
#include<iostream>
using namespace std;
int b,p,k;
int quick(int num)
{
if(num==0){
return 1;
}
int tmp=quick(num/2)%k;
tmp=(tmp*tmp)%k;
if(num%2==1){
tmp=(tmp*b)%k;
}
return tmp;
}
inline void output()
{
cout<<quick(p);
}
inline void input()
{
cin>>b>>p>>k;
b%=k;
}
int main()
{
input();
output();
}
//COYG
取模的话..貌似不是除法就不会错