您的位置:首页 > 其它

幂取模

2014-03-17 17:02 274 查看
#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
__int64 pow_mod1(__int64 a,__int64 n,__int64 m)
{
if(n==0) return 1;
__int64 ans,x=pow_mod1(a,n/2,m);
ans=(x*x)%m;
if(n%2) ans=(ans*a)%m;
return ans;
}
__int64 pow_mod2(__int64 a, __int64 b, __int64 c)
{
__int64 ans = 1;
a = a % c;
while(b>0)
{
if(b%2==1)
ans = (ans * a) % c;
b = b/2;
a = (a * a) % c;
}
return ans;
}

int main()
{
__int64 a,n,m;
while(scanf("%I64d%I64d%I64d",&a,&n,&m)==3)
{
a=a%m;
printf("%I64d\n",pow_mod1(a,n,m));
printf("%I64d\n",pow_mod2(a,n,m));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: