虽然公式好推,但是毕竟涉及到进制不太好思考,而且前缀和维护的时候小细节很多要不然会wa最后一个点,比如sum数组要多算到大于n的地方,特判求和等于0等等的情况,还是比较繁琐的,可以升一下黄吧
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=5e5+10,mod=20070720;
ll n,k,a[maxn*2],sum[maxn*2],ans1[1000001],p[100001];
void solve(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
sum[0]=0;
p[0]=1;
for(int i=1;i<=n*2;i++){
p[i]=p[i-1]*k%mod;
sum[i]=(sum[i-1]%mod+p[i-1])%mod;
}
ll ans=0;
for(int i=1;i<=n;i++){
ll s=(sum[n-i+1]%mod*a[i]%mod*i%mod)%mod;
ans=(ans+s)%mod;
}
ll cnt=0;
if(ans==0){
cout<<0<<endl;
return;
}
while(ans){
ans1[++cnt]=ans%k;
ans/=k;
}
for(int i=cnt;i>=1;i--)cout<<ans1[i]<<" ";
cout<<"\n";
}
int main(){
int T;
cin>>T;
while(T--)solve();
}