【模板】快速幂

啊 写这个模板是源于一个悲伤的考试…

  1. 基本介绍
  2. 模板题目
  3. 代码实现

基本介绍

快速幂就是快速计算一个数的多少次幂 意思很好理解
思路就是 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

取模的话..貌似不是除法就不会错

posted @ 2017-05-21 21:37  ars4me  阅读(127)  评论(0)    收藏  举报