1 条题解

  • 0
    @ 2024-8-2 16:19:45

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    
    // 辗转相除求最大公约数
    int gcd(int a, int b) {
        while (a % b != 0) {
            int t = a % b;
            a = b;
            b = t;
        }
        return b;
    }
    
    // 求最小公倍数
    long long lcm(int a, int b) {
        return (long long)a * b / gcd(a, b);
    }
    
    int main() {
        // 容斥原理
        int a, b, c, t;
        cin >> t >> a >> b >> c;
    
        int x = lcm(a, b); // a、b 的公倍数
        int y = lcm(a, c); // a、c 的公倍数
        int z = lcm(b, c); // b、c 的公倍数
        int s = lcm(x, c); // a、b、c 的公倍数
    
        // 天数: a 的天数 + b 的天数 + c 的天数 - (a、b 的公倍数 + a、c 的公倍数 + b、c 的公倍数) + a、b、c 的公倍数
        cout << t - (t / a + t / b + t / c) + (t / x + t / y + t / z) - t / s;
    
        return 0;
    }
    
    
    • 1

    信息

    ID
    1024
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者