Problem Description
输入b,p,k的值,求b^p mod k的值。
Input
输入有多组数据,每组数据为一行三个数b,p,k,其中b,p,k*k为长整型数。
Output
对于每组数据输出b^p mod k的值。
Sample Input
2 10 9
Sample Output
2^10 mod 9=7
#include<stdio.h> #include<math.h> int main() { __int64 b,p,k,sum; int i; while(scanf("%I64d%I64d%I64d",&b,&p,&k)!=EOF) { sum=1; for(i=0;i<p;i++) { sum*=b; sum=sum%k; } printf("%I64d^%I64d mod %I64d=%I64d\n",b,p,k,sum); } return 0; } //治分算法 #include<iostream> #include<cstdio> using namespace std; int b, p, k, a; int f(int p) //利用分治求b^p % k { if (p == 0) return 1; // b^0 %k=1 long long t = f(p / 2) % k; //p>>1 t = (t * t) % k; // b^p %k=(b^(p/2))^2 % k if (p % 2 == 1) //p&1 (如果p为奇数,则 b^p %) t = (t * b) % k; return (int)t; //k=((b^(p/2))^2)* b%k } int main() { while(cin >> b >> p >> k) //读入3个数 { int x = b; //将b的值备份 b = b % k; //防止b太大 printf("%d^%d mod %d=%d\n", x, p, k, f(p)); //输出 } return 0; }
//另一种
long long result(long long a,long long b,long long m)
{
long long d,t;
d=1;
t=a;
while (b>0)
{
if (b%2==1)
d=(d*t)%m;
b/=2;
t=(t*t)%m;
}
return d;
}