1 solutions

  • 0
    @ 2023-12-3 21:35:14

    C++ :

    #include <bits/stdc++.h>
    #define ll long long
    #define uint unsigned
    #define ull unsigned ll
    #define pii pair<int, int>
    #define pll pair<ll, ll>
    #define PB push_back
    #define fi first
    #define se second
    #define For(i, j, k) for (int i = (int)(j); i <= (int)(k); i++)
    #define Rep(i, j, k) for (int i = (int)(j); i >= (int)(k); i--)
    #define CLR(a, v) memset(a, v, sizeof(a))
    #define CPY(a, b) memcpy(a, b, sizeof(a))
    using namespace std;
    const int N = 23335;
    int f[N], v[N], T, mo;
    int power(int x, int y) {
        int s = 1;
        for (; y; y /= 2, x = 1ll * x * x % mo)
            if (y & 1)
                s = 1ll * s * x % mo;
        return s;
    }
    int main() {
        scanf("%d%d", &T, &mo);
        For(i, 0, N - 1) f[i] = 1;
        v[1] = 1;
        For(i, 2, N - 1) {
            int v1 = f[i];
            ull v2 = 1ll * f[1] * v[i - 1] % mo;
            For(j, 1, i - 2) {
                v2 += 2ll * f[i - j] * v[j];
                if (!(j & 7))
                    v2 %= mo;
            }
            v2 %= mo;
            f[i] = 1ll * (v1 + v2) * power(i, mo - 2) % mo;
            v[i] = (1ll * i * f[i] + v1) % mo;
            For(j, 2, (N - 1) / i) f[i * j] = (f[i * j] + 1ll * f[i] * i) % mo;
        }
        while (T--) {
            int x;
            scanf("%d", &x);
            printf("%d\n", x <= 1 ? f[x] : 2 * f[x] % mo);
        }
    }
    
    • 1

    Information

    ID
    1310
    Time
    10000ms
    Memory
    512MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By