-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy patheuler-072.py
69 lines (61 loc) · 1.27 KB
/
euler-072.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
import psyco
psyco.full()
import primes
import fraction
def lowerPrimeIterator(lower, upper, mult, L) :
while lower < upper :
yield L, lower
lower *= mult
L *= mult
return
def currentPrimeIterator(lower, upper, mult, L) :
while lower < upper :
yield L, lower
lower *= mult
L *= mult
return
def euler72(upper) :
p = primes.primes(upper)
d = [-1] * upper
for j, pn in enumerate(p) :
#print pn, "\r",
if pn >= upper: break
L = pn - 1
#d[pn] = L
a = [pn]
for val, k in currentPrimeIterator(pn, upper, pn, L) :
d[k] = val
a.append(k)
for x in a :
for i in xrange(j) :
px = p[i]
for val, k in lowerPrimeIterator(x*px, upper, x, L*x) :
if not k in d :
d[k] = val
print
#for i,v in enumerate(d):
# if v == -1 :
# print i
#print sum(v for k,v in d.iteritems())
print sum(d)
for i,v in enumerate(d):
print i,v
#for k,v in d.iteritems() :
# print k, v
#print visited - len(p), sum((1 if e == 0 else 1) for e in d)
print
def bruteForceEuler72(upper) :
s = set()
for j in range(2, upper) :
print j, len(s), "\r",
for i in range(1, j) :
f = (i, j)
rf = fraction.reducedFraction (f)
s.add(rf)
print
print len(s)
if __name__ == "__main__" :
upper = 1000*1000+1
##upper = 2000
#euler72(upper)
bruteForceEuler72(upper)