-
Notifications
You must be signed in to change notification settings - Fork 0
/
EulerP26.py
63 lines (44 loc) · 1.14 KB
/
EulerP26.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
from decimal import *
import re
def getSubStrings(L, n, x):
substrings = []
i = 0
while i <= x + 1:
substrings.append(L[i:i+n])
i += n
return substrings
def displaymatch(match):
if match is None:
return 0
return len(match.group(1))
getcontext().prec = 2000
MAX = 6
for i in xrange(11,1000):
x = Decimal(1.0)/Decimal(i)
#x = str(x).replace("0.00", "").replace("0.0", "")[:-1]
pattern = re.search(r"^[0-9]\.[0-9]*([0-9]{7,}?)(\1+)[0-9]*?$", str(x))
length = displaymatch(pattern)
#print length
if length > MAX:
MAX = i
#print x,i
print MAX, "max"
def recurring_cycle(n, d):
# solve 10^s % d == 10^(s+t) % d
# where t is length and s is start
for t in range(1, d):
if 1 == 10**t % d:
return t
return 0
longest = max(recurring_cycle(1, i) for i in range(2,1001))
print([i for i in range(2,1001) if recurring_cycle(1, i) == longest][0])
d = 20
def period(d):
while d % 2 == 0: d /= 2
while d % 5 == 0: d /= 2
p = 1
for p in range(1, d):
if (10**p - 1) % d == 0:
return p
return p
print period(983)