📅  最后修改于: 2023-12-03 15:40:13.949000             🧑  作者: Mango
本文介绍如何计算最多为 N 且只有 4 个因子或除数的数字总数。
一个数 N 的因子或除数最多只有两个因子或除数相等,在这种情况下,N 可以表示为 $a^2$ 的形式。为了使一个数的因子或除数总数为 4,可以将其表示为两个不同的质数的积,即 $p_1 * p_2$,或者表示为一个质数的立方,即 $p^3$。
因此,只需要枚举素数 p 和另一个素数 q,或者枚举素数 p 的立方根即可。
def count_numbers_with_4_divisors(N):
"""
计算最多为 N 且只有 4 个因子或除数的数字总数
"""
primes = get_primes(int(N ** 0.5) + 1)
result = 0
for i in range(len(primes)):
if primes[i] ** 3 > N:
break
for j in range(i + 1, len(primes)):
if primes[i] * primes[j] > N:
break
result += 1
return result
def get_primes(n):
"""
获取小于等于 n 的所有素数
"""
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for i in range(2, int(n ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, n + 1, i):
is_prime[j] = False
return [i for i in range(n + 1) if is_prime[i]]
>>> count_numbers_with_4_divisors(10)
0
>>> count_numbers_with_4_divisors(12)
1
>>> count_numbers_with_4_divisors(25)
2
>>> count_numbers_with_4_divisors(40)
3
>>> count_numbers_with_4_divisors(100)
9
解释: