快速幂

题目链接

P1226 【模板】快速幂||取余运算mi

快速幂

题目描述

给你三个整数 \(a,b,p\),求 \(a^b \bmod p\)

输入格式

输入只有一行三个整数,分别代表 \(a,b,p\)

输出格式

输出一行一个字符串 \(a^b mod p=s\),其中 \(a,b,p\) 分别为题目给定的值, \(s\) 为运算结果。

输入

2 10 9

输出

2^10 mod 9=7

说明/提示

样例解释

\(2^{10} = 1024,1024 \bmod 9 = 7\)

数据规模与约定

对于 \(100\%\) 的数据,保证 \(0\le a,b < 2^{31},a+b>0,2 \leq p \lt 2^{31}\)

代码

  • 时间复杂度:\(O(logb)\)
#include<bits/stdc++.h>
using namespace std;
int ksm(int a,int b,int p)
{
    int res=1%p;
    for(;b;b>>=1)
    {
        if(b&1)res=1ll*res*a%p;
        a=1ll*a*a%p;
    }
    return res;
}
int main()
{
    int a,b,p;
    scanf("%d%d%d",&a,&b,&p);
    printf("%d^%d mod %d=%d",a,b,p,ksm(a,b,p));
    return 0;
}
posted @ 2021-09-20 16:07  zyy2001  阅读(79)  评论(0编辑  收藏  举报