#11867. Count the Divisors / 统计因数个数
Count the Divisors / 统计因数个数
Problem J2: Count the Divisors / 统计因数个数
任务总览表
任务名称 | 时间限制 | 内存限制 | 分数 |
---|---|---|---|
Count the Divisors / 统计因数个数 | 1 秒 | 256 MB | 100 分 |
题目描述
给定两个正整数 A 和 B,请计算在区间 [1, B] 内,有多少个整数是 A 的因数。换句话说,统计满足 A 整除 x(即 A | x)的整数 x 的个数,其中 1 <= x <= B。
输入格式
输入包含两个正整数 A 和 B,保证 1 <= A, B <= 1000000。
输出格式
输出一个整数,表示在区间 [1, B] 内 A 的因数的个数。
样例输入 1
3 10
样例输出 1
3
解释:在区间 [1, 10] 内,能被 3 整除的数有 3, 6, 9,共 3 个。
样例输入 2
4 20
样例输出 2
5
解释:在区间 [1, 20] 内,能被 4 整除的数有 4, 8, 12, 16, 20,共 5 个。
提示
-
A 的因数指的是可以被 A 整除的数,即满足 A | x 的所有 x。
-
计算从 1 到 B 中有多少个数是 A 的倍数,可以使用公式:
count = B / A
这可以在 O(1) 时间内计算得出。
题目分析
目标:求区间 [1, B] 内能被 A 整除的数的个数。 思路:
- 一个数 x 是 A 的因数当且仅当 x 是 A 的倍数,即 A | x。
- 在 [1, B] 内,A 的倍数是 A, 2A, 3A, ... , kA,其中 k = B / A。
- 直接计算
B / A
即可得到答案,时间复杂度为 O(1)。
时间复杂度分析
- 直接使用整除运算 B // A,只需要 O(1) 的时间。
- 由于 A, B 最大为 1000000,该解法能在 1 秒内高效运行。
结论
- 该问题可以用数学方法高效求解,无需遍历 1 到 B 的所有数。
- 关键在于理解“整除”的定义,以及利用整除运算符
/
快速计算答案。