Permalink
Browse files

Merge branch 'master' of https://github.com/tingleshao/eulerMKII

  • Loading branch information...
2 parents 75f8b59 + c537dbc commit ad354f619908a708ee37055c20c4ccba9a9007d5 @tingleshao committed Apr 25, 2013
@@ -0,0 +1,43 @@
+# problem 112
+# boundcy numbers
+def isDECorINC(n):
+ n_lst = map(int, list(str(n)))
+ if len(n_lst) <= 2:
+ return True
+ if n_lst[0] < n_lst[1]:
+ return isINC(n_lst[1:])
+ if n_lst[0] > n_lst[1]:
+ return isDEC(n_lst[1:])
+ return isDECorINC(int("".join(map(str,n_lst[1:]))))
+
+
+
+
+
+def isDEC(n_lst):
+ if len(n_lst) == 1:
+ return True
+ if n_lst[0] < n_lst[1]:
+ return False
+ return isDEC(n_lst[1:])
+
+def isINC(n_lst):
+ if len(n_lst)== 1:
+ return True
+ if n_lst[0] > n_lst[1]:
+ return False
+ return isINC(n_lst[1:])
+
+bouncy_count = 0
+for i in range(1,2000001):
+ if not isDECorINC(i):
+ print str(i) + " is bouncy "
+ bouncy_count += 1
+ else:
+ print str(i) + ' is not bouncy'
+ if i > 1500000:
+ if bouncy_count / float(i) == 0.99:
+ print i
+ break
+
+print bouncy_count / 2000000.0
@@ -0,0 +1,21 @@
+# problem 166
+
+def get_new_grid():
+ grid = []
+ for j in range(4):
+ row = []
+ for k in range(4):
+ row.append(0)
+ grid.append(row)
+ return grid
+
+for i in range(37):
+ sum_ = i
+ grid = get_new_grid()
+ for row in grid:
+ for ele in row:
+ for j in range(10):
+ grid[row] = j
+
+
+
@@ -0,0 +1,25 @@
+# problem 206
+i = 1009950493
+while True:
+
+ print i
+ isq = str(i ** 2)
+ if len(isq) == 19:
+ if isq[0] == '1':
+ if isq[2] == '2':
+ if isq[4] == '3':
+ if isq[6] == '4':
+ if isq[8] == '5':
+ if isq[10] == '6':
+ if isq[12] == '7':
+ if isq[14] == '8':
+ if isq[16] == '9':
+ if isq[18] == '0':
+ print "-----------"
+ print i
+ print isq
+ break
+ i += 1
+ if i == 1389026623:
+ break
+
@@ -0,0 +1,146 @@
+# problem 213
+# http://projecteuler.net/thread=213
+#First? I just calculated the probability of each flee being in each square after 50 rounds, and #summed the probability of each square being empty based on those probabilities. Runs in a little #under 4 seconds on my machine.
+'''import random
+
+trials = 10001
+totalcount = 0
+for k in range(trials):
+
+ grid = []
+ for i in range(30):
+ row = []
+ for j in range(30):
+ row.append(1)
+ grid.append(row)
+ bells = 50
+ for i in range(bells):
+ for row in range(30):
+ for col in range(30):
+ ran = random.random()
+ grid[row][col] -=1
+ if row == 0:
+ if col == 0:
+ if ran < 1.0 / 2:
+ grid[row+1][col] += 1
+ else:
+ grid[row][col+1] += 1
+ if col == 29:
+ if ran < 1.0 / 2:
+ grid[row+1][col] += 1
+ else:
+ grid[row][col-1] += 1
+ else:
+ if ran < 1.0 / 3:
+ grid[row][col+1] += 1
+ elif ran < 2.0 /3:
+ grid[row][col-1] += 1
+ else:
+ grid[row+1][col] += 1
+ elif row == 29:
+ if col == 0:
+ if ran < 1.0 / 2:
+ grid[row-1][col] += 1
+ else:
+ grid[row][col+1] += 1
+ if col == 29:
+ if ran < 1.0 / 2:
+ grid[row-1][col] += 1
+ else:
+ grid[row][col-1] += 1
+ else:
+ if ran < 1.0 / 3:
+ grid[row][col-1] += 1
+ elif ran < 2.0 /3:
+ grid[row][col+1] += 1
+ else:
+ grid[row-1][col] += 1
+ else:
+ if col == 0:
+ if ran < 1.0 / 3:
+ grid[row-1][col] += 1
+ elif ran < 2.0 / 3:
+ grid[row][col+1] += 1
+ else:
+ grid[row+1][col] += 1
+ if col == 29:
+ if ran < 1.0 / 3:
+ grid[row-1][col] += 1
+ elif ran < 2.0 / 3:
+ grid[row][col-1] += 1
+ else:
+ grid[row+1][col] += 1
+ else:
+ if ran < 1.0 / 4:
+ grid[row][col-1] += 1
+ elif ran < 2.0 /4:
+ grid[row-1][col] += 1
+ elif ran < 3.0 /4:
+ grid[row][col+1] += 1
+ else:
+ grid[row+1][col] += 1
+ count = 0
+
+ for i in range(30):
+ for j in range(30):
+ if grid[i][j] == 0:
+ count += 1
+
+ print count
+ totalcount += count
+print float(totalcount ) / trials'''
+
+# ---
+grid = []
+dx = [-1,1,0,0]
+dy = [0,0,1,-1]
+for i in range(900):
+ mat0 = []
+ mat1 = []
+ for j in range(30):
+ row0 = []
+ row1 = []
+ for k in range(30):
+ row0.append(0.0)
+ row1.append(0.0)
+ mat0.append(row0)
+ mat1.append(row1)
+ grid.append([mat0,mat1])
+for f in range(900):
+ print f
+ grid[f][0][f%30][f/30] = 1.0;
+ for r in range(1,51):
+ cur = r % 2
+ prev = 1 - cur
+ newmat = []
+ for j in range(30):
+ row = []
+ for k in range(30):
+ row.append(0.0)
+ newmat.append(row)
+ grid[f][cur] = newmat
+ for x in range(30):
+ for y in range(30):
+ tot = 4
+ if x == 0 or x == 29:
+ tot -= 1
+ if y == 0 or y == 29:
+ tot -= 1
+ for d in range(4):
+ nx = x + dx[d]
+ ny = y + dy[d]
+ if nx < 0 or ny < 0 or nx >= 30 or ny >= 30:
+ continue
+ #print grid[f][prev][x][y] / float(tot)
+ grid[f][cur][nx][ny] += grid[f][prev][x][y] / float(tot)
+ret = 0.0
+for x in range(30):
+ for y in range(30):
+ p = 1.0
+ for f in range(900):
+ p *= 1 - grid[f][0][x][y]
+ print p
+ ret += p
+
+
+print ret
@@ -0,0 +1,16 @@
+# problem 243
+#http://blog.dreamshire.com/2012/12/19/project-euler-problem-243-solution/
+primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
+ratio = 15499/94744.0
+
+def denom(ratio):
+ d, s = 1, 1
+ for p in primes:
+ d *= p
+ s *= p-1
+ for i in range(2, p):
+ if s*i / (d*i-1.) < ratio:
+ return d*i
+ return "Please buy more primes!"
+
+print 'Answer to PE243 = ',denom(ratio)
@@ -0,0 +1,35 @@
+# problem 64
+# http://www.mathblog.dk/project-euler-continued-fractions-odd-period
+import math
+
+def loop_length(n):
+ m = 0.0
+ d = 1.0
+ a = math.floor(math.sqrt(n))
+ S = float(n)
+ param_lst = [[m,d,a]]
+ loop_len = 0
+ for i in range(1000):
+ m1 = d * a - m
+ # print "m: " + str(m1)
+ d1 = (S - m1 ** 2) / d
+ # print "d: " + str(d1)
+ a1 = math.floor( (math.sqrt(S) + m1) / float(d1) )
+ # print "a: " + str(a1)
+ if [m1,d1,a1] in param_lst:
+ # why we can instread check a1 == 2 * a0 here?
+ return len(param_lst) - param_lst.index([m1,d1,a1])
+ d = d1
+ a = a1
+ m = m1
+ param_lst.append([m,d,a])
+
+count= 0
+
+for i in range(2,10001):
+ if math.sqrt(i) % 1 != 0:
+ #print "i: " + str(i)
+ lop_len = loop_length(i)
+ if lop_len % 2 == 1:
+ count += 1
+print count
@@ -0,0 +1,41 @@
+# problem 70
+# http://www.mathblog.dk/project-euler-70-investigate-values-of-n-for-which-%CF%86n-is-a-permutation-of-n/
+
+phi_best = 1
+best = 1
+best_ratio = 100000000
+
+
+def is_prime(n):
+ for i in range(2,n):
+ if n % i == 0:
+ return False
+ return True
+
+limit = 10000000
+prime_lst = []
+for n in range(2000,5001):
+ if is_prime(n):
+ prime_lst.append(n)
+
+for i in prime_lst:
+ for j in prime_lst:
+ n = i * j
+ if n > limit:
+ break
+ phi = (i - 1) * (j-1)
+ ratio = float(n) / phi
+ n_sort = list(str(n))
+ n_sort.sort()
+ phi_sort = list(str(phi))
+ phi_sort.sort()
+ if phi_sort == n_sort and best_ratio > ratio:
+ best = n
+ phi_best = phi
+ best_ratio = ratio
+
+
+print "best: "+ str(best)
+print "phi_best: " + str(phi_best)
+print "best_ratio: " + str(best_ratio)
+
@@ -12,7 +12,7 @@ def gcd(a,b):
#count = 0
for d in range(1,12001):
print d
- for n in range(1,d):
+ for n in range((d-1)/3,(d+1)/2):
fn = float(n)
flag = True
if fn / d >= 1.0 / 2:
@@ -0,0 +1,52 @@
+# problem 74
+def factorial(n):
+ if n == 0:
+ return 1
+ elif n == 1:
+ return 1
+ elif n == 2:
+ return 2
+ elif n == 3:
+ return 6
+ elif n == 4:
+ return 24
+ elif n == 5:
+ return 120
+ elif n == 6:
+ return 720
+ elif n == 7:
+ return 5040
+ elif n == 8:
+ return 40320
+ elif n == 9:
+ return 362880
+#len_lst = []
+total_count = 0
+for i in range(1,1000000):
+ print "-----------"
+ print i
+ dd = i
+ sum_ = 0
+ lst = []
+ while True:
+ sum_ = 0
+ for d in str(dd):
+ sum_ = sum_ + factorial(int(d))
+ if sum_ in lst:
+ #len_lst.append(len(lst))
+ if i == 78:
+ print "--------"
+ print lst
+ print "88888"
+ if len(lst) == 59:
+ total_count += 1
+ print "-->>>>>" + str(i)
+ break
+ lst.append(sum_)
+ dd = sum_
+print total_count
+
+#print "max: " +str( max(len_lst) )
+
+
+
Oops, something went wrong. Retry.

0 comments on commit ad354f6

Please sign in to comment.