题意:
给出一段代码看懂简化下,Lightoj上有好多这种数论题了,这题就是说有k层循环每层遍历n个数字,最后把k层遍历到的数字全部加和取模。
思路:
水题,稍微推下公式就有res=n^k*k/n*sum%mod;就是一共有n^k种组合,每种组合k个数字,平均分给n个数字,之后快速幂解决。
代码:
long long n,m,mod,sum,t;
long long power(long long x,long long k,long long mod)
{
long long ans = 1;
while(k)
{
if(k & 1) ans=ans*x%mod;
x=x*x%mod;
k >>= 1;
}
return ans;
}
int main()
{
int i,j,k,kk,x,y,z;
scanf("%d",&k);
kk=0;
while(k--)
{
scanf("%lld%lld%lld",&n,&m,&mod);
sum=0;
for(i=0;i<n;i++){scanf("%lld",&t);sum+=t;}
printf("Case %d: %lld\n",++kk,power(n,m-1,mod)*m%mod*sum%mod);
}
return 0;
}