幂运算不能直接用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; }