YY一下就可以得到最后的答案(因为有些并一起啊什么的全部都喜闻乐见消掉)为N*M^(K-1)-M*(M+1)/2*M^(K-2)*(K-1),开始推了个式子貌似跪了,原因是中途要DIV个二好像有点问题,然后就索性重推了一遍。然后就A了,喜闻乐见。
program p3142; var n,m,k,p,i,j:int64; function quick(k1,k2:int64):int64; var i,j,k,tot:int64; begin k:=k1; j:=k2; tot:=1; while j<>0 do begin if j and 1<>0 then tot:=tot*k mod p; j:=j shr 1; k:=k*k mod p; end; exit(tot); end; begin readln(n,k,m,p); dec(k); i:=quick(m,k-1); writeln(int64(n mod p*m-m*(m+1) div 2 mod p*k+p*1000000000) mod p*i mod p); end.