幂运算不能直接用pow函数,可能会超过数据范围。
相关知识:蒙哥马利幂模运算
#include <stdio.h>
#include <math.h>
__int64 c(__int64 k,__int64 b)
{
__int64 D=1;
while (k>=1)
{
if (k%2==0)
{
b=b*b%1000000007;
k/=2;
}
else
{
D=D*b%1000000007;
k--;
}
}
return D;
}
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int n;
__int64 t,k;
scanf("%d",&n);
scanf("%I64d%I64d",&t,&k);
__int64 a[10000],b[10000];
int i;
for (i=0;i<=n-1;i++)
scanf("%I64d",&a[i]);
for (i=0;i<=n-1;i++)
{
if ((i-t)%n==0)
b[i]=a[0]*c(t,k)%1000000007;
else if (i-t<0)
b[i]=a[(i-t)%n+n]*c(t,k)%1000000007;
else
b[i]=a[i-t]*c(t,k)%1000000007;
}
if (t!=0)
{
for (i=0;i<=n-2;i++)
printf("%I64d ",b[i]);
printf("%I64d\n",b[i]);
}
else
{
for (i=0;i<=n-2;i++)
printf("%I64d ",a[i]);
printf("%I64d\n",a[i]);
}
}
return 0;
}