最小的两个具有两个不同质数因子的连续整数是:
14 = 2 × 7
15 = 3 × 5
最小的三个具有三个不同质数因子的连续整数是:
644 = 2² × 7 × 23
645 = 3 × 5 × 43
646 = 2 × 17 × 19.
找出最小的四个具有四个不同质数因子的整数。它们之中的第一个是多少?
import math
import time
def is_prime(x):
""" 质数判断 """
if x == 1:
return False
if x == 2:
return True
assert math.floor(x) == x and x > 0
x_sqrt = int(math.sqrt(x))
l = [2]
l.extend(range(3, x_sqrt + 1, 2))
for i in l:
if x % i == 0:
return False
return True
def get_factor(x):
""" 质数因子 """
factor = []
if is_prime(x):
factor.extend([x])
return factor
xx_sqrt = int(math.sqrt(x))
for i in range(2, xx_sqrt + 1):
if x % i == 0:
if i in factor_dict:
factor.extend(factor_dict[i])
else:
factor_ = get_factor(i)
factor.extend(factor_)
factor_dict[i] = factor_
j = x // i
if j in factor_dict:
factor.extend(factor_dict[j])
else:
factor_ = get_factor(j)
factor.extend(factor_)
factor_dict[j] = factor_
break
return factor
t0 = time.time()
n = 4
consecutive_num = 2 * 3 * 5 * 7
n_factors = 0
factor_dict = dict()
while 1:
if len(set(get_factor(consecutive_num))) == n:
n_factors += 1
if n_factors == n:
break
else:
n_factors = 0
consecutive_num += 1
print(consecutive_num - 3)
t1 = time.time()
print(t1 - t0)