vendredi 15 octobre 2010
Euler #46
#!/usr/bin/env python
from libeuler import is_prime, primes
from math import sqrt
if __name__ == '__main__':
P = primes(100000)
n = 1
while True:
found = False
for p in P[1:]:
a2 = n - 0.5*(p - 1)
if a2 < 0:
break
if sqrt(a2) == float(int(sqrt(a2))):
print "%d -> %d + 2*%d^2" % (2*n + 1, p, sqrt(a2))
found = True
n += 1
break
if not found and not (2*n+1) in P:
print 2*n + 1
break
Euler #42
#!/usr/bin/env python
def word_value(w):
return sum(map(lambda x: ord(x) - ord('A') + 1, w))
def triangle_numbers(l):
res = []
n = 1
t = 1
while t < l:
t = n*(n+1)/2
res += [t]
n += 1
return res
if __name__ == '__main__':
f = open('words.txt', 'r')
words = f.read()
f.close()
words = map(word_value, map(lambda x: x[1:-1], words.split(',')))
triangles = triangle_numbers(max(words))
n = 0
for w in words:
if w in triangles: n += 1
print n
Euler #41
#!/usr/bin/env python
from libeuler import is_prime, pandigital
if __name__ == '__main__':
res = []
for i in xrange(1, 10):
res += filter(lambda x: is_prime(x), pandigital(i))
print max(res)
Euler #40
#!/usr/bin/env python
def create_fraction():
f = ''
cnt = 1
while len(f) < 1000000:
f += str(cnt)
cnt += 1
return f
if __name__ == '__main__':
fraction = create_fraction()
d1 = int(fraction[0])
d10 = int(fraction[9])
d100 = int(fraction[99])
d1000 = int(fraction[999])
d10000 = int(fraction[9999])
d100000 = int(fraction[99999])
d1000000 = int(fraction[999999])
print d1 * d10 * d100 * d1000 * d10000 * d100000 * d1000000
Well, obviously we can use arrays and powers of 10
Euler #39
#!/usr/bin/env python
from math import sqrt
def n_triangles(p):
res = []
for a in xrange(1, p):
for b in xrange(a, p):
c = sqrt(a*a + b*b)
if a + b + c == p:
res += [(a, b, c)]
return res
for p in xrange(3, 1000):
t = n_triangles(p)
if len(t) > 0:
print p, len(t), t
Euler #38
#!/usr/bin/env python
from libeuler import is_pandigital
def concatenated_product(n, l):
return reduce(lambda x, y: str(x) + str(y), map(lambda x: x*n, l), '')
if __name__ == '__main__':
r = []
n = 1
m = 9
while True:
p = concatenated_product(n, range(1, m+1))
print "%d -> %s" % (n, p), range(1, m+1)
if len(p) > 9:
m -= 1
if m < 2:
break
continue
if is_pandigital(int(p)):
r += [int(p)]
n += 1
print max(r)
Euler #36
#!/usr/bin/env python
def is_palyndrome(s): return (s == reduce(lambda x,y: x+y, reversed(s), ''))
def right_number(n):
c1 = is_palyndrome(str(n))
c2 = is_palyndrome(bin(n)[2:])
if c1 and c2:
return n
else:
return 0
if __name__ == '__main__':
print reduce(lambda x, y: x+y, map(right_number, range(1000000)), 0)
Inscription à :
Commentaires (Atom)