-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEuler76F.py
65 lines (54 loc) · 1.12 KB
/
Euler76F.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
p=dict()
p[0]=1
p[1]=1
d=dict()
for i in range(1,2000):
d[i*(3*i+1)/2] = i
d[i*(3*i-1)/2] = i
print sorted(d.keys())
raw_input()
def alpha(n):
if n == 0:
return 1
elif n in d:
return pow(-1, d[n])
else:
return 0
def build_p(n):
total_number = 0
ans=[]
arrays= []
for i in range(n,0,-1):
ans.append([i])
while len(ans)>0:
entry = ans.pop(0)
total_number +=1
for x in next_digits(entry,n):
ans.append(entry + [x])
p[n] = total_number
def next_digits(entry,n):
total = n - sum(entry)
maximum = entry[-1]
if total < maximum:
start = total
else:
start = maximum
return range(start,1,-1)
for i in range(2,20):
build_p(i)
j=20
while True:
print j
# eq = "0 - ("
value = 0
for i in range(1,j+1):
if alpha(i)!= 0:
value -= alpha(i)*p[j-i]
# eq += " "+ (str(alpha(i))[0:-1]+"+")[0] + "p["+ str(j-i)+"]"
# eq +=")"
p[j]=value
if value % 1000000 == 0:
print "ANSWER!"
print j
break
j+=1