Submission #56617393


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) (x).begin(), (x).end()

const int mod = 998244353;

using matrix = array<array<ll, 65>, 65>;
const int p[] = {2, 3, 5, 7, 11, 13};

matrix operator*(const matrix &a, const matrix &b) {
    matrix c;
    for (int i = 0; i < 65; i++) {
        for (int j = 0; j < 65; j++) {
            c[i][j] = 0;
        }
    }

    for (int i = 0; i < 65; i++)
        for (int j = 0; j < 65; j++)
            for (int k = 0; k < 65; k++)
                (c[i][j] += a[i][k] * b[k][j]) %= mod;
    return c;
}

int main() {
    cin.tie(0)->sync_with_stdio(false);

    ll n;
    int m;
    cin >> n >> m;

    matrix base;
    for (int i = 0; i < 65; i++) {
        for (int j = 0; j < 65; j++) {
            base[i][j] = 0;
        }
    }

    for (int x = 1; x <= m; x++) {
        vector<int> have(6);
        for (int i = 0; i < 6; i++) {
            for (int y = x; y % p[i] == 0; y /= p[i])
                have[i]++;
        }

        for (int i = 0; i < 64; i++) {
            for (int j = 0; j < 64; j++) {
                if ((i & j) != i)
                    continue;

                int ways = 1;
                for (int b = 0; b < 6; b++) {
                    if ((i >> b & 1) == 0 && (j >> b & 1))
                        ways *= have[b];
                }

                (base[i][j] += ways) %= mod;
            }
        }
    }
    base[63][64] = base[64][64] = 1;

    matrix res;
    for (int i = 0; i < 65; i++)
        for (int j = 0; j < 65; j++)
            res[i][j] = i == j;

    for (; n; n >>= 1, base = base * base)
        if (n & 1)
            res = res * base;

    ll ans = mod - 1;
    for (int i = 0; i < 64; i++)
        (ans += res[i][63] + res[i][64]) %= mod;

    cout << ans << '\n';

    return 0;
}

Submission Info

Submission Time
Task C - Sum of Number of Divisors of Product
User juliany2
Language C++ 20 (gcc 12.2)
Score 600
Code Size 1901 Byte
Status AC
Exec Time 99 ms
Memory 3696 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 51
Set Name Test Cases
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 01-random-001.txt, 01-random-002.txt, 01-random-003.txt, 01-random-004.txt, 01-random-005.txt, 01-random-006.txt, 01-random-007.txt, 01-random-008.txt, 01-random-009.txt, 01-random-010.txt, 02-large-001.txt, 02-large-002.txt, 02-large-003.txt, 02-large-004.txt, 02-large-005.txt, 02-large-006.txt, 02-large-007.txt, 02-large-008.txt, 02-large-009.txt, 02-large-010.txt, 03-max-001.txt, 03-max-002.txt, 03-max-003.txt, 03-max-004.txt, 03-max-005.txt, 04-small-001.txt, 04-small-002.txt, 04-small-003.txt, 04-small-004.txt, 04-small-005.txt, 04-small-006.txt, 04-small-007.txt, 04-small-008.txt, 04-small-009.txt, 04-small-010.txt, 05-killer-001.txt, 05-killer-002.txt, 05-killer-003.txt, 06-corner-001.txt, 06-corner-002.txt, 06-corner-003.txt, 06-corner-004.txt, 06-corner-005.txt, 06-corner-006.txt, 06-corner-007.txt, 06-corner-008.txt, 06-corner-009.txt, 06-corner-010.txt
Case Name Status Exec Time Memory
00-sample-001.txt AC 3 ms 3480 KiB
00-sample-002.txt AC 4 ms 3564 KiB
00-sample-003.txt AC 24 ms 3568 KiB
01-random-001.txt AC 77 ms 3532 KiB
01-random-002.txt AC 77 ms 3540 KiB
01-random-003.txt AC 79 ms 3564 KiB
01-random-004.txt AC 69 ms 3564 KiB
01-random-005.txt AC 73 ms 3540 KiB
01-random-006.txt AC 82 ms 3456 KiB
01-random-007.txt AC 72 ms 3568 KiB
01-random-008.txt AC 76 ms 3548 KiB
01-random-009.txt AC 74 ms 3548 KiB
01-random-010.txt AC 75 ms 3616 KiB
02-large-001.txt AC 74 ms 3548 KiB
02-large-002.txt AC 73 ms 3572 KiB
02-large-003.txt AC 78 ms 3696 KiB
02-large-004.txt AC 74 ms 3508 KiB
02-large-005.txt AC 70 ms 3560 KiB
02-large-006.txt AC 72 ms 3556 KiB
02-large-007.txt AC 76 ms 3480 KiB
02-large-008.txt AC 74 ms 3512 KiB
02-large-009.txt AC 76 ms 3480 KiB
02-large-010.txt AC 67 ms 3564 KiB
03-max-001.txt AC 72 ms 3664 KiB
03-max-002.txt AC 85 ms 3668 KiB
03-max-003.txt AC 84 ms 3564 KiB
03-max-004.txt AC 86 ms 3528 KiB
03-max-005.txt AC 83 ms 3452 KiB
04-small-001.txt AC 3 ms 3576 KiB
04-small-002.txt AC 4 ms 3692 KiB
04-small-003.txt AC 5 ms 3560 KiB
04-small-004.txt AC 4 ms 3472 KiB
04-small-005.txt AC 5 ms 3536 KiB
04-small-006.txt AC 5 ms 3508 KiB
04-small-007.txt AC 6 ms 3660 KiB
04-small-008.txt AC 5 ms 3512 KiB
04-small-009.txt AC 6 ms 3512 KiB
04-small-010.txt AC 6 ms 3568 KiB
05-killer-001.txt AC 96 ms 3564 KiB
05-killer-002.txt AC 98 ms 3528 KiB
05-killer-003.txt AC 99 ms 3456 KiB
06-corner-001.txt AC 3 ms 3564 KiB
06-corner-002.txt AC 3 ms 3548 KiB
06-corner-003.txt AC 4 ms 3452 KiB
06-corner-004.txt AC 3 ms 3696 KiB
06-corner-005.txt AC 4 ms 3620 KiB
06-corner-006.txt AC 5 ms 3620 KiB
06-corner-007.txt AC 4 ms 3536 KiB
06-corner-008.txt AC 4 ms 3576 KiB
06-corner-009.txt AC 5 ms 3480 KiB
06-corner-010.txt AC 6 ms 3696 KiB