hdu 4506(快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4506
一开始不知道如何下手,后来网上看别人说是用快速幂做。。。各人觉得tencent的题出的挺不错的。。。
View Code
1 #include<iostream> 2 #include<cmath> 3 const int MOD=1e9+7; 4 const int N=10100; 5 using namespace std; 6 __int64 num[N]; 7 8 //快速幂 9 __int64 pow(__int64 k,__int64 t){ 10 if(k==0)return 0; 11 if(k==1)return 1; 12 __int64 p=k,q=1; 13 while(t){ 14 if(t&1){ 15 q=p*q%MOD; 16 } 17 t>>=1; 18 p=p*p%MOD; 19 } 20 return q%MOD; 21 } 22 23 24 int main(){ 25 int _case; 26 scanf("%d",&_case); 27 while(_case--){ 28 __int64 n,time,k; 29 scanf("%I64d%I64d%I64d",&n,&time,&k); 30 k=pow(k,time); 31 for(int i=0;i<n;i++){ 32 scanf("%I64d",&num[i]); 33 num[i]=num[i]*k%MOD; 34 } 35 time%=n; 36 printf("%I64d",num[(n+0-time)%n]); 37 for(int i=1;i<n;i++){ 38 printf(" %I64d",num[(n+i-time)%n]); 39 } 40 printf("\n"); 41 } 42 return 0; 43 }