您的位置:首页 > 其它

求乘方取模(快速幂+慢速乘法模板)

2016-08-23 20:21 405 查看

求乘方取模

题目描述:

给定非负整数A、B、M,求(A ^ B) mod M。

输入描述 Input Description

包含多组输入,输入处理到EOF。

每组输入仅一行,三个用空格隔开的非负整数A、B、M。

输出描述:

对于每组输入,输出一行,一个非负整数,即(A ^ B) mod M。

样例输入:

2 3 100006

32 71 83

900 800 777

样例输出:

8

5

219

数据范围及提示:

0 <= A, B < 8 * 10^18。

0 < M < 8 * 10^18。

保证A和B不同时为0。

#include<iostream>
#include<cstdio>
using namespace std;
unsigned long long a,b,m;
unsigned long long quick_mul(unsigned long long a,unsigned long long b,unsigned long long mod)//慢速乘法模板
{
unsigned long long ans=0;
while(b)
{
if(b&1)
{
b--;
ans=(ans+a)%mod;
}
b>>=1;
a=(a+a)%mod;
}
return ans;
}
unsigned long long quick_mi(unsigned long long a,unsigned long long b,unsigned long long mod)//快速幂模板
{
unsigned long long ans=1;
while(b)
{
if(b&1)
ans=quick_mul(ans,a,mod);
b>>=1;
a=quick_mul(a,a,mod);
}
return ans;
}
int main()
{
while(cin>>a>>b>>m)//a^b%m
cout<<quick_mi(a,b,m)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: