4 条题解
-
0
#include <cstdio> int main() { long long n; long long res = 0; scanf("%lld", &n); // A*B*C <= N // => A*B <= N/C // => C <= N/(A*B) // 因为 A <= B <= C // A*A*A <= N (如果 A^3都 大于 n, 那么 A*B*C就更不用说, 肯定 > n, 所以是不合法的) // A*B*B <= N for (long long a = 1; a * a * a <= n; ++a) { // 注意 遍历需要使用long long, 不然乘法会爆炸 for (long long b = a; a * b * b <= n; ++b) { long long tmp = n / (a * b) - b; if (tmp >= 0) res += tmp + 1; // 说明 1 ~ n/(a*b) 个 c 都是合法的 // - b 是为了保证 b < c // + 1 是当 b == c 时候, b - c 为 0 但是计数需要+1 } } printf("%lld\n", res); return 0; }
信息
- ID
- 79
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 928
- 已通过
- 124
- 上传者