SDNU OJ 1349 快速幂入门
Description
输入3个数a,b,c,求a^b mod c=?
Input
多组数据:每组数据,三个数a,b,c。
Output
对于每一组数据,输出一个数,即a^b mod c 的答案。
Sample Input
5 10 9
1.用递归实现
# include <cstdio>
# include <iostream>
using namespace std;
long long FastM(long long a, long long p, long long m)
{
long long tmp,ans;
a%=m;
if(p == 1)//是1次方,直接返回
{
return a;
}
else if(p == 0)//0次方,返回1%m
{
return 1 % m;
}
tmp=FastM(a, p/2, m); //计算a^(p/2)%m;
ans=tmp * tmp % m;//a^p=a^(p/2)*a^(p/2)
if(p % 2 == 1) //如果p是奇数,再乘上a
{
ans = ans * a % m;
}
return ans;
}
int main ()
{
long long a,b,c;
while (cin >> a >> b >> c)
{
printf ("%lld\n",FastM(a,b,c));
}
return 0;
}
2.用循环来实现:
#include<cstdio>
long long mod(long long a,long long b,long long k)
{
long long ans=1;
a = a % k;
while(b>0)
{
if(b % 2 == 1)
ans=(ans * a) % k;//如果是奇数就要多求一步可以提前算在ans里
b /= 2;
a = (a * a) % k;
}
return ans;
}
int main()
{
long long A,B,K;
while(scanf("%lld%lld%lld",&A,&B,&K) != EOF)
{
printf("%lld\n",mod(A,B,K));
}
return 0;
}