68 lines
1.5 KiB
Python
68 lines
1.5 KiB
Python
'''
|
||
The first two consecutive numbers to have two distinct prime factors are:
|
||
|
||
14 = 2 × 7
|
||
15 = 3 × 5
|
||
|
||
The first three consecutive numbers to have three distinct prime factors are:
|
||
|
||
644 = 2² × 7 × 23
|
||
645 = 3 × 5 × 43
|
||
646 = 2 × 17 × 19.
|
||
|
||
Find the first four consecutive integers to have four distinct prime factors each. What is the first of these numbers?
|
||
'''
|
||
|
||
import math
|
||
import numpy as np
|
||
|
||
def sieve(n):
|
||
assert n > 1
|
||
|
||
ns = [True] * n
|
||
|
||
for i in range(2, math.ceil(np.sqrt(n))):
|
||
if ns[i]:
|
||
j = pow(i, 2)
|
||
|
||
while j < n:
|
||
ns[j] = False
|
||
j = j + i
|
||
|
||
return [i for i,val in enumerate(ns) if val][2:]
|
||
|
||
def primeFactors(n, primes):
|
||
res = []
|
||
|
||
for p in primes:
|
||
if n % p == 0:
|
||
res.append(p)
|
||
while n % p == 0:
|
||
n /= p
|
||
|
||
return res
|
||
|
||
def main():
|
||
print("Hello this is Patrick")
|
||
|
||
end = 1000000
|
||
primeList = sieve(end)
|
||
primeSet = set(primeList)
|
||
consecs = 0
|
||
|
||
for n in range(100000, end):
|
||
if n not in primeSet:
|
||
if len(primeFactors(n, primeList)) == 4:
|
||
consecs += 1
|
||
else:
|
||
consecs = 0
|
||
else:
|
||
consecs = 0
|
||
|
||
if consecs == 4:
|
||
for i in range(n-3, n+1):
|
||
print(i, primeFactors(i, primeList))
|
||
break
|
||
|
||
if __name__ == "__main__":
|
||
main() |