📅  最后修改于: 2023-12-03 14:55:22.281000             🧑  作者: Mango
本题要求找出一个最小的正整数,其只有 4 个除数,且任意两个连续的整数之间的差不超过 D。
一个正整数的因数个数可以从它的因数分解式中得到。例如,$12=2^2\times3$,所以 12 的因数个数为 $(2+1)(1+1)=6$。如果一个正整数只有 4 个因数,那么它必须是如下三种情况中的一种:
我们可以试着从最小的质数 2 开始枚举,找到第一个满足条件的数。
我们可以从 2 开始枚举,判断当前数和上一个数之间的差是否超过了 D。如果超过了,那么就从上一个数加上 D 开始继续枚举。
import math
def is_prime(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
return False
return True
def find_num_with_4_divisors(D):
num = 2
while True:
if is_prime(num):
if is_prime(num+D):
if is_prime((num+2*D)**2-4):
return num*(num+D)
num += 1
else:
num += 1
本算法采用了从 2 开始枚举的方式,时间复杂度为 $O(n)$,其中 n 为满足条件的数的个数。但由于满足条件的数很少,因此实际运行时间很短。