1 条题解

  • 0
    @ 2024-9-14 16:13:27

    参考答案:

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    const int N = 50010;
    int st[N];
    int sum[N];
    int primes[N];
    int cnt;
    vector<int> res;
    int a, b;
    
    void get_primes(int n)
    {
        for (int i = 2; i <= n; ++i)
        {
            if (!st[i]) primes[++cnt] = i;
            for (int j = 1; primes[j] <= n / i; ++j)
            {
                st[primes[j] * i] = 1;
                if (i % primes[j] == 0) break;
            }
        }
    }
    int get(int a, int b)
    {
        int res = 0;
        while (a)
        {
            res += a / b;
            a /= b;
        }
        return res;
    }
    vector<int> mul(vector<int> a, int b)
    {
        reverse(a.begin(), a.end());
        vector<int> c;
        int t = 0;
        for (int i = 0; i < a.size(); ++i)
        {
            t += a[i] * b;
            c.push_back(t % 10);
            t /= 10;
        }
        while (t)
        {
            c.push_back(t % 10);
            t /= 10;
        }
        reverse(c.begin(), c.end());
        return c;
    }
    int main()
    {
        cin >> a >> b;
        get_primes(a);
    
        for (int i = 1; i <= cnt; ++i)
        {
            int p = primes[i];
            sum[i] = get(a, p) - get(b, p) - get(a - b, p);
        }
        res.push_back(1);
        for (int i = 1; i <= cnt; ++i)
        {
            for (int j = 0; j < sum[i]; ++j)
            {
                res = mul(res, primes[i]);
            }
        }
        for (int i = 0; i < res.size(); ++i) printf("%d", res[i]);
        cout << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    5366
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者