-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProjectEuler50.py
73 lines (63 loc) · 1.82 KB
/
ProjectEuler50.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env python
# coding:utf-8
"""
Project Euler Problem 50
素数41は6つの連続する素数の和として表せる:
41 = 2 + 3 + 5 + 7 + 11 + 13.
100未満の素数を連続する素数の和で表したときにこれが最長になる.
同様に, 連続する素数の和で1000未満の素数を表したときに最長になるのは953で21項を持つ.
100万未満の素数を連続する素数の和で表したときに最長になるのはどの素数か?
"""
import time
import Euler
time1 = time.time()
maxl = 0
limit = 1000000
answer = 0
max_kosuu = 550 # この個数を超えて和を求めても100万を超過する
primes = tuple(Euler.prime_make(limit))
primes_2 = tuple(primes[1:])
for i in range(2, max_kosuu, 2):
sums = sum(primes[:i])
length = len(primes[:i])
if sums > limit:
break
if length > maxl and sums in primes:
maxl = length
answer = sums
print(maxl, """primes[:i],""""sum is", sums)
for i in range(3, max_kosuu, 2):
for j in range(len(primes_2) - i):
sums = sum(primes_2[j:i])
length = len(primes[j:i])
if sums > limit:
break
if length > maxl and sums in primes:
maxl = length
answer = sums
print(maxl, """primes_2[j:i],""""sum is", sums)
"""
def inlistcheck(x,seq):
seq=seq.sort()
if seq[0]==x:
return 1
elif seq[0]>x:
return 0
else:
if x>seq[len(seq)/2]:
inlistcheck(x,seq[:len(seq)/2])
else:
inlistcheck(x,seq[len(seq)/2:])
"""
"""
number=0 #条件を満たす最後の素数を保持する
l=22
k=22
for l in range(22,len(s)-100):
for i in range(len(s)-l):
if sum(s[i:i+l]) in s:
number=sum(s[i:i+l])
k=l
"""
print(answer)
print(time.time() - time1, "seconds")