比赛 2025.5.24 评测结果 AAAATTAAAA
题目名称 线性同余发生器 最终得分 80
用户昵称 wdsjl 运行时间 1.155 s
代码语言 C++ 内存使用 47.92 MiB
提交时间 2025-05-24 10:51:57
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;

long long egcd(long long a, long long b, long long &x, long long &y) {
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    long long g = egcd(b, a % b, y, x);
    y -= a / b * x;
    return g;
}

long long inv(long long a, long long m) {
    long long x, y;
    long long g = egcd(a, m, x, y);
    if (g != 1) return -1;
    return (x % m + m) % m;
}

int main() {
	freopen("LCG.in","r",stdin);
	freopen("LCG.out","w",stdout);
    long long a, m;
    cin >> a >> m;

    vector<long long> bh(m, 0);
    long long d = __gcd(a - 1, m);
    if (d != 1) {
        cout << "No black hole!" << endl;
        return 0;
    }

    long long iv = inv(a - 1, m);
    if (iv == -1) {
        cout << "No black hole!" << endl;
        return 0;
    }

    for (long long c = 1; c < m; ++c) {
        bh[c] = (c * iv) % m;
    }

    long long p = 1;
    for (long long c = 1; c < m; ++c) {
        p = (p * bh[c]) % MOD;
    }

    cout << p << endl;
    return 0;
}