HNOI2013 - 数列

https://www.lydsy.com/JudgeOnline/problem.php?id=3142
推一推,答案应该就是 \(nm^{k-1}-(k-1)m^{k-2}\dfrac{m(m+1)}{2}\)

#include <bits/stdc++.h>

using namespace std;

typedef long long i64;

i64 n, m, k, MOD;

i64 sub(i64 a, i64 b) {
    return (a -= b) < 0 ? a + MOD : a;
}

i64 mul(i64 a, i64 b) {
    return a * b % MOD;
}

i64 power(i64 a, i64 e) {
    i64 ret = 1;
    for (; e; e >>= 1) {
        if (e & 1) 
            ret = mul(ret, a);
        a = mul(a, a);
    }
    return ret;
}

int main() {
    while (~scanf("%lld %lld %lld %lld", &n, &k, &m, &MOD)) {
        n %= MOD;
        i64 A = mul(n, power(m, k - 1));
        i64 B = mul(k - 1, mul(power(m, k - 2), m * (m + 1) / 2 % MOD));
        printf("%lld\n", sub(A, B));
    }
}

猜你喜欢

转载自www.cnblogs.com/arg-53/p/9302018.html