-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEuler_50.py
More file actions
86 lines (69 loc) · 2.39 KB
/
Euler_50.py
File metadata and controls
86 lines (69 loc) · 2.39 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import Euler_10 as sieve
import itertools as it
import time
from operator import itemgetter
def acu_sum(x):
i = 0
for number in range(len(x)):
i += x[number]
#print (i, number)
yield (i, number)
def prime_con(n):
primes = sieve.second_sieve(n)
print(primes)
consecutive_primes = [x for x in acu_sum(primes) if x[0] in primes]
print(consecutive_primes)
for i in primes:
print("NEW LOOP", i)
primes = primes[1:]
consecutive_primes = consecutive_primes + [x for x in acu_sum(primes) if x[0] in primes[1:]]
print(primes)
print(consecutive_primes)
print(primes)
print(consecutive_primes)
def acu_sum2(x):
i = 0
for number in range(len(x)):
i += x[number]
#print (i, number)
yield number
def prime_con2(n):
primes_to_check = sieve.second_sieve(n)
primes_to_sum = prime_sum(n,primes_to_check)
prime=[(0,0)]
for i in range(len(primes_to_sum)):
slices_of_primes = primes_to_sum[i:]
consecutive_primes = [(i,x) for i,x in enumerate(it.accumulate(slices_of_primes)) if x in primes_to_check]
longest_prime = max(consecutive_primes, key=itemgetter(0))
if longest_prime[0] > prime[-1][0]:
prime.append(longest_prime)
return max(prime, key=itemgetter(0))
def prime_sum(n,primes):
temp=0
count=0
for i in range(len(primes)):
temp += primes[i]
count+=1
if temp > n:
break
return primes[:count]
#print(prime_con2(1000000))
# Korrekt, 522 sek = 8.7 min, prim = 997651, sumlængde = 543
start_time = time.time()
def prime_sum2(n):
primes_to_check = sieve.second_sieve(n)
primes_to_sum = prime_sum(n,primes_to_check)
cumulative_sum = list(it.accumulate(primes_to_sum[:-1]))
n = len(cumulative_sum)
cumulative_primes = []
for i in range(1,len(cumulative_sum)+1):
if cumulative_sum[-i] in primes_to_check:
cumulative_primes.append((cumulative_sum[-i], n-i+1))
for j in range(len(cumulative_sum)):
if cumulative_sum[-i]-cumulative_sum[j] in primes_to_check:
cumulative_primes.append((cumulative_sum[-i]-cumulative_sum[j], n-i+1))
print(cumulative_primes)
return max(cumulative_primes, key=itemgetter(1))[0]
#18 min, korrekt svar
print(prime_sum2(1000000))
print("--- %s seconds ---" % (time.time() - start_time))