这道题读懂题意之后用到同余方程+快速幂就出来了。
题目中最后得到的数就是res=sum*n^(k-1)*k。为什么呢?把题目的程序贴在编译器上自己调试一下就的出来了。sum指的是数列里的的和。之后就很简单了。
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fin(a,n) for(int i=a;i<=n;i++)
const int maxn=10e3+10;
ll ksm(ll a,ll b,ll c)
{ ll ans=1;
a=a%c;
while(b)
{
if(b%2==1)ans=(ans*a)%c;
b/=2;
a=(a*a)%c;
}
return ans;
}
int main()
{
int n;
scanf("%d",&n);
for(int cas=1;cas<=n;cas++)
{
ll x,k,mod;
scanf("%lld %lld %lld",&x,&k,&mod);
ll sum=0;
fin(1,x)
{
ll a;
scanf("%lld",&a);
sum+=a;
}
ll ans=((sum%mod)*(k%mod))%mod;
ans=((ans%mod)*ksm(x,k-1,mod))%mod;
printf("Case %d: %lld\n",cas,ans);
}
}