http://acm.hust.edu.cn/vjudge/contest/view.action?cid=107165#problem/B
第一次接触快速幂,看了别人的博客,x代表底数,n为指数
- typedef long long LL;
- LL fun(LL x,LL n,)
- {
- LL res=1;
- while(n>0)
- {
- if(n & 1)
- res=(res*x)%Max;
- x=(x*x)%Max;
- n >>= 1;
- }
- return res;
- }
好吧,贴个代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
const int MO = 1000000007;
#define maxn 10010
typedef long long ll;
ll aa[maxn];
using namespace std;
ll quick(ll m,ll n)
{
ll ans = 1;
while (n)
{
if (n & 1)
ans = (ans*m) % MO;
m = (m * m) % MO;
n >>= 1; // 就是 n /= 2;
}
return ans;
}
int main()
{
int T;
while (~scanf("%d",&T))
{
while (T--)
{
ll n,t,k,si,so;
scanf("%I64d %I64d %I64d",&n,&t,&k);
for (int i = 0;i < n;i++)
scanf("%I64d",&aa[i]);
si = t % n;
so = quick(k,t);
for (int i = 0;i < n;i++)
//循环数组取模。。。自己模拟一下即可
printf("%I64d%c",aa[(i - si + n) % n] * so % MO,(i == n-1 )?'\n':' ');
}
}
return 0;
}