1 条题解

  • 0
    @ 2026-9-30 12:55:09

    C++ :

    
    #include <cstdio>
    typedef unsigned long long ull;
    int main(){
        ull a, b, c, d, U;
        if(scanf("%llu %llu %llu %llu %llu", &a, &b, &c, &d, &U) != 5) return 0;
    
        /* 等差数列在 [1, U] 内的项数 */
        ull ap = (a > U) ? 0 : (U - a) / b + 1;
    
        /* 等比数列项数,以及其中落在等差数列里的个数 */
        ull gp = 0, ov = 0;
        if(c > 0){
            ull t = c;
            while(t <= U){
                gp++;
                if(t >= a && (t - a) % b == 0) ov++;
                if(d <= 1) break;          /* d == 1:等比数列只有一项,别死循环 */
                if(t > U / d) break;       /* 再乘一次会超过 U(d 最大 1e18,防溢出) */
                t *= d;
            }
        }
        printf("%llu\n", ap + gp - ov);
        return 0;
    }
    
    
    • 1

    信息

    ID
    2803
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者