changeset 3:b94533a8c529

Merging two branches
author Dominic Cleal <dominic@computerkb.co.uk>
date Mon, 01 Dec 2008 10:58:23 +0000
parents 1ca695e32f66 (current diff) fa152d695acd (diff)
children 3271813c55ec
files
diffstat 7 files changed, 137 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem19.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,12 @@
+import datetime
+
+t = 0
+d = datetime.date(1901, 1, 1)
+for y in range(1901, 2001):
+	d = d.replace(year=y)
+	for m in range(1, 13):
+		d = d.replace(month=m)
+		if d.isoweekday() == 7:
+			t += 1
+print t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem25.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,7 @@
+fib = [1, 1]
+i = 2
+while (len(str(fib[-1])) < 1000):
+	fib.insert(0, fib.pop() + fib[-1])
+	i += 1
+print i
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem27.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,36 @@
+import math
+
+def test(a, b):
+	n = 0
+	fx = lambda n: n**2 + a*n + b
+	v = fx(n)
+	while v > 1 and isprime(v):
+		n += 1
+		v = fx(n)
+	return n - 1
+
+def isprime_int(x):
+	for t in range(3, int(math.floor(math.sqrt(x)))):
+		if x % t == 0:
+			return False
+	return True
+
+cache = { }
+def isprime(x):
+	if x % 2 == 0:
+		return False
+	if x in cache:
+		return cache[x]
+	r = isprime_int(x)
+	cache[x] = r
+	return r
+
+rmx = 0
+for a in range(-999,1000):
+	for b in range(-999,1000):
+		r = test(a, b)
+		if r > rmx:
+			rmx = r
+			rcoeff = (a, b)
+			print "New winner, a=%d, b=%d for %d" % (a, b, r)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem29.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,5 @@
+l = { }
+for a in range(2, 101):
+	for b in range(2, 101):
+		l[a**b] = None
+print len(l.keys())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem30.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,5 @@
+t = 0
+for i in xrange(2, 9999999):
+	if i == sum([int(c)**5 for c in str(i)]):
+		t += i
+		print "got %d, total %d" % (i, t)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem49.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,37 @@
+import math
+
+def same_digits(x, y):
+	lx = [c for c in str(x)]
+	lx.sort()
+	ly = [c for c in str(y)]
+	ly.sort()
+	# print "%s ~~ %s" % (lx, ly)
+	return lx == ly
+
+def is_prime_int(x):
+	for t in range(3, int(math.floor(math.sqrt(x)))):
+		if x % t == 0:
+			return False
+	return True
+
+cache = { }
+def is_prime(x):
+	if x % 2 == 0:
+		return False
+	if x in cache:
+		return cache[x]
+	r = is_prime_int(x)
+	cache[x] = r
+	return r
+
+for x in range(1000, 9999):
+	for y in range(1000, 9999):
+		(a, b, c) = (x, x+y, x+2*y)
+		if c > 9999:
+			break
+		if not is_prime(a) or not is_prime(b) or not is_prime(c):
+			continue
+		if not same_digits(a, b) or not same_digits(b, c):
+			continue
+		print "a=%d, b=%d, c=%d" % (a, b, c)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/problem50.py	Mon Dec 01 10:58:23 2008 +0000
@@ -0,0 +1,35 @@
+import math
+
+def count(i, min):
+	for a in range(0, len(p) - min):
+		t = 0
+		for b in range(a, len(p)):
+			t += p[b]
+			if t == i:
+				return b - a + 1
+			if t > i:
+				break
+	return False
+
+cmax = 0
+imax = 0
+p = [ 2 ]
+i = 3
+while i < 1000:
+	isp = True
+	max = int(math.floor(math.sqrt(i)))
+	for t in p[1:]:
+		if t > max:
+			break
+		if i % t == 0:
+			isp = False
+			break
+	if isp:
+		p.append(i)
+		c = count(i, cmax)
+		if not c == False and c > cmax:
+			cmax = c
+			imax = i
+			print "New max %d with %d conseq" % (i, c)
+	i += 2
+