bzoj3142: [Hnoi2013]数列

题目
题解

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,k,m,p;
ll pw(ll x,ll y){
    ll z=1;
    for (;y;y>>=1,x=x*x%p)
        if (y&1) z=z*x%p;
    return z;
}
int main(){
    scanf("%lld%lld%lld%lld",&n,&k,&m,&p);n%=p;
    printf("%lld",(pw(m,k-1)*n%p-(k-1)*pw(m,k-2)%p*(m*(m+1)/2%p)%p+p)%p);
}
posted @ 2018-08-01 14:44  Mingoal  阅读(17)  评论(0)    收藏  举报  来源