-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathp071.py
More file actions
82 lines (76 loc) · 1.98 KB
/
Copy pathp071.py
File metadata and controls
82 lines (76 loc) · 1.98 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
from fractions import Fraction as F
from fractions import gcd
def main():
den = 10**4
l = []
for d in range(den, 0, -1):
s, u = (428*d)//999, d//2
print(d, s, u)
for n in range(s + 1, u + 1):
frac = F(n, d)
l.append(F(n, d))
# if not frac in l:
# l.append(F(n, d))
print('created!')
l.sort()
prev = 0
for frac in l:
if frac == F(3, 7):
break
prev = frac
print(prev)
def solve():
den = 10**6
l = []
res = 0
sentinel = F(3, 7)
for d in range(2, den+1):
# for n in range(1, d):
# s, u = (428*d)//999, d//2
# s, u = (4283*d)//9994, d//2
s, u = (42857*d)//100000, d//2
s, u = (428570*d)//999997, d//2
print(d, s, u)
for n in range(s + 1, u + 1):
if gcd(n, d) == 1:
# l.append(F(n, d))
tmp = F(n, d)
if tmp > res:
if tmp < sentinel:
res = tmp
else:
break
print(res)
# print('Created!')
# l.sort()
# print('sorted!')
# prev = 0
# for frac in l:
# if frac == F(3, 7):
# break
# prev = frac
# print(prev)
def solve_optimized():
"""Shamelessly copied from overview for prob 71
I just can't believe I couldn't think of this. - 11/June/2014
"""
num = 3
den = 7
best_num = 0
best_den = 1
cur_den = 10**140
min_den = 1
while cur_den > min_den:
# for every denominator we need to consider only one numerator
cur_num = (num*cur_den - 1)//den
if best_num*cur_den < cur_num*best_den:
best_num = cur_num
best_den = cur_den
delta = num*cur_den - den*cur_num
min_den = (cur_den // delta) + 1
cur_den -= 1
print(best_num, best_den)
if __name__ == '__main__':
# main()
# solve()
solve_optimized()