第一行包含一個整數T(T <= 1000),代表測試數據組數。 接下來的T行每行含三個整數,N,P,M(1 <= N <= 10^10,1 <= P <= 10^15,1 <= M <= 9)。
輸出
輸出格式“Case #i: ans”(不含引號),i表示第i組測試數據,ans為所求結果。
樣例輸入
2
2 4 1
3 7 2
樣例輸出
Case #1: 6
Case #2: 87
快速冪模!
AC碼:
#include<stdio.h>
long long n,p,m;
long long Mi(long long mm)
{long long a=n,b=p,result=1;while(b){if(b&1)result=(result*a)%mm;a=(a*a)%mm;b=b/2;}return result%mm;
}
int main()
{long long T,i,mm;int count=1;scanf("%lld",&T);while(T--){scanf("%lld%lld%lld",&n,&p,&m);mm=1;for(i=1;i<=m;i++)mm*=10;printf("Case #%d: %lld\n",count++,Mi(mm));}return 0;
} 二分法!
AC碼:
#include<stdio.h>
long long fun(long long n,long long p,long long mm)
{long long result;if(p==1)return n;result=fun(n,p/2,mm);if(p%2==1)return (((result*result)%mm)*n)%mm;elsereturn (result*result)%mm;
}
int main()
{int T,i,j;long long n,p,m,mm;scanf("%lld",&T);for(i=1;i<=T;i++){scanf("%lld%lld%lld",&n,&p,&m);mm=1;for(j=1;j<=m;j++)mm*=10;printf("Case #%d: %lld\n",i,fun(n,p,mm));}return 0;
}