1 条题解
-
0
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
- 上传者