欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-14 18:17:49
...

题目描述

输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。

输入输出格式

输入格式:

 

三个整数b,p,k.

 

输出格式:

 

输出“b^p mod k=s”

s为运算结果

 

输入输出样例

输入样例#1: 复制

2 10 9

输出样例#1: 复制

2^10 mod 9=7
#include<bits/stdc++.h>
using namespace std;
long long b,a,p,k,ans=1,c;
int main()
{
    scanf("%d%d%d",&b,&p,&k);
    a=b;c=p;
    while(p>0)//快速幂
    {
        if(p%2!=0)
            ans=ans*b%k;//如果p为单数,乘到ans里面去,然后取模
        b=b*b%k;//每次运算都取模
        p=p>>1;    //用位运算除2,可能会快一点
    }
    printf("%d^%d mod %d=%d",a,c,k,ans%k);//输出
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
long long b,a,p,k,ans=1,c;
typedef long long ll;
ll res=1;
void mod_pow(ll x,ll n,ll mod)
{
    while(n>0)
    {
        if(n&1)
            res=res*x%mod;
        x=x*x%mod;
        n>>=1;
    }
}
int main()
{
    ll b,p,k;
    scanf("%lld%lld%lld",&b,&p,&k);
    mod_pow(b,p,k);
    printf("%lld^%lld mod %lld=%lld",b,p,k,res%k);//输出
    return 0;
}