-
Notifications
You must be signed in to change notification settings - Fork 0
/
projecteuler668.py
executable file
·49 lines (41 loc) · 1023 Bytes
/
projecteuler668.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env python3.6
"""
PROBLEM: 668
AUTHOR: Dirk Meijer
STATUS: experimentation
EXPLANATION:
answer should be correct, but takes too much time and memory to calculate.
update: answer is wrong.
"""
from Euler.tictoc import tic,toc
from Euler.eprint import eprint
from sympy import sieve
from math import sqrt
lim = 10**10
sqrtlim = int(sqrt(lim))
gen = set()
S = 1
def nextgen():
global gen,S
#eprint(gen)
newgen = set()
S += len(gen)
for n in gen:
for p in sieve.primerange(1,min(sqrtlim,lim//n+1)):
newgen.add(p*n)
del gen
gen = newgen
if __name__=="__main__":
tic()
sieve.extend(sqrtlim)
for p1 in sieve.primerange(1,sqrtlim):
for p2 in sieve.primerange(p1,min(sqrtlim,lim//p1+1)):
if p1*p2 > lim:
break
for p3 in sieve.primerange(p2,min(sqrtlim,lim//(p1*p2)+1,p1*p2+1)):
gen.add(p1*p2*p3)
while len(gen)>0:
nextgen()
print(S)
toc()
exit()