📅  最后修改于: 2023-12-03 14:59:08.047000             🧑  作者: Mango
首先,一个数字只有 2 和 7 两个质因数,等价于这个数字的质因数分解式只包含 2 和 7 两个质因数。
假设当前考虑的数字为 $n$,如果 $n$ 包含其它质因数,那么肯定无法满足条件,因此我们只需要考虑 $n$ 的质因数分解式是否只包含 2 和 7 两个质因数即可。
由于 $n$ 的最小质因数为 $p$,所以 $n$ 的任何因数都会包含 $p$,因此在枚举 $n$ 时,我们可以对 $p=2$ 和 $p=7$ 分别进行讨论:
确定了 $n$ 的质因数分解式中只包含 2 和 7 两个质因数后,我们只需要判断 $n$ 是否在 [L, R] 范围内即可统计满足条件的数字数量。
def count_numbers_with_only_2_and_7(L: int, R: int) -> int:
"""
统计 [L, R] 范围内只由 2 和 7 两个质因数组成的数字数量
"""
def count_num(n: int, p: int) -> int:
res = 0
while n % p == 0 and n >= L:
n //= p
res += 1
return res
count = 0
for n in range(L, R + 1):
cnt_2 = count_num(n, 2)
cnt_7 = count_num(n, 7)
if n == 1 or n == 2**cnt_2 * 7**cnt_7:
count += 1
return count
其中,count_num
函数用于统计 $n$ 的质因数分解式中质因数 $p$ 的指数,即 $n$ 中包含 $p$ 的因数个数。而在主函数中,我们枚举了 [L, R] 范围内的每一个数,并分别统计其中质因数 2 和 7 的个数,进而判断是否满足条件。最后返回满足条件的数字数量即可。