mirror of
https://github.com/jlengrand/project_euler.git
synced 2026-03-10 08:41:20 +00:00
Same commit as before. Forgotten to include new files
This commit is contained in:
39
e_15.py
Executable file
39
e_15.py
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
##---
|
||||
# jlengrand
|
||||
#Created on : Mon Jan 16 13:53:07 CET 2012
|
||||
#
|
||||
# DESCRIPTION : Solves problem 15 of Project Euler
|
||||
Starting in the top left corner of a 2x2 grid, there are 6 routes (without backtracking) to the bottom right corner.
|
||||
How many routes are there through a 20x20 grid?
|
||||
|
||||
This problem is linked with the catalan number.
|
||||
To get to the extreme right, 2xn moves have to be performed
|
||||
Moves are either R or D.
|
||||
There is the same the same number of R and D in the sequence.
|
||||
|
||||
Problem is finally : How many strings of size 2xn are there consisting of nxR and nxD?
|
||||
-> number of ways in which we can choose n positions from 2xn available.
|
||||
binomial :
|
||||
(2n n) = (2n)! / (n! x n!)
|
||||
##---
|
||||
"""
|
||||
def square_grid_path(n):
|
||||
"""
|
||||
Returns the number of paths from top left to bottom right of a
|
||||
nxn grid.
|
||||
"""
|
||||
return (fact(2*n) / (fact(n) * fact(n)))
|
||||
|
||||
def fact(value):
|
||||
"""
|
||||
Returns value!
|
||||
"""
|
||||
if value < 2:
|
||||
return value
|
||||
else:
|
||||
return value * fact(value - 1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
print "Answer : %d" % (square_grid_path(20))
|
||||
40
e_18.py
Executable file
40
e_18.py
Executable file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
##---
|
||||
# jlengrand
|
||||
#Created on : Mon Jan 16 15:34:46 CET 2012
|
||||
#
|
||||
# DESCRIPTION : Solves problem 18 of Project Euler
|
||||
By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.
|
||||
3
|
||||
7 4
|
||||
2 4 6
|
||||
8 5 9 3
|
||||
That is, 3 + 7 + 4 + 9 = 23.
|
||||
|
||||
Find the maximum total from top to bottom of the triangle below:
|
||||
75
|
||||
95 64
|
||||
17 47 82
|
||||
18 35 87 10
|
||||
20 04 82 47 65
|
||||
19 01 23 75 03 34
|
||||
88 02 77 73 07 63 67
|
||||
99 65 04 28 06 16 70 92
|
||||
41 41 26 56 83 40 80 70 33
|
||||
41 48 72 33 47 32 37 16 94 29
|
||||
53 71 44 65 25 43 91 52 97 51 14
|
||||
70 11 33 28 77 73 17 78 39 68 17 57
|
||||
91 71 52 38 17 14 91 43 58 50 27 29 48
|
||||
63 66 04 68 89 53 67 30 73 16 69 87 40 31
|
||||
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
|
||||
##---
|
||||
"""
|
||||
def fun():
|
||||
"""
|
||||
"""
|
||||
|
||||
return 1
|
||||
|
||||
if __name__ == '__main__':
|
||||
print "Answer : %d" % (fun())
|
||||
39
e_21.py
Executable file
39
e_21.py
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
##---
|
||||
# jlengrand
|
||||
#Created on : Mon Jan 16 16:22:29 CET 2012
|
||||
#
|
||||
# DESCRIPTION : Solves problem 21 of Project Euler
|
||||
Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
|
||||
If d(a) = b and d(b) = a, where a b, then a and b are an amicable pair and each of a and b are called amicable numbers.
|
||||
|
||||
For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.
|
||||
|
||||
Evaluate the sum of all the amicable numbers under 10000.
|
||||
##---
|
||||
"""
|
||||
def amicable_numbers(max_val):
|
||||
"""
|
||||
Returns the sum of amicable numbers under max_val
|
||||
"""
|
||||
am_list = []
|
||||
for val in range(1, max_val):
|
||||
am = sum_divisors(val)
|
||||
if am != val and sum_divisors(am) == val :
|
||||
am_list.append(val)
|
||||
|
||||
return sum(am_list)
|
||||
|
||||
def sum_divisors(value):
|
||||
"""
|
||||
Returns the sum of the list of proper divisors of value
|
||||
"""
|
||||
div = []
|
||||
for val in range(1, value ):
|
||||
if (value % val == 0):
|
||||
div.append(val)
|
||||
return sum(div)
|
||||
|
||||
if __name__ == '__main__':
|
||||
print "Answer : %d" % (amicable_numbers(10000))
|
||||
33
e_25.py
Executable file
33
e_25.py
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
##---
|
||||
# jlengrand
|
||||
#Created on : Mon Jan 16 14:01:09 CET 2012
|
||||
#
|
||||
# DESCRIPTION : Solves problem 25 of Project Euler
|
||||
The Fibonacci sequence is defined by the recurrence relation:
|
||||
|
||||
Fn = Fn1 + Fn2, where F1 = 1 and F2 = 1.
|
||||
The 12th term, F12, is the first term to contain three digits.
|
||||
|
||||
What is the first term in the Fibonacci sequence to contain 1000 digits?
|
||||
##---
|
||||
"""
|
||||
def fibo_dig_count(count):
|
||||
"""
|
||||
Returns the first term of Fibonacci sequence to contain count digits
|
||||
"""
|
||||
last_val = 1
|
||||
val = 1 # Fibonacci starts with 1
|
||||
inc = 0
|
||||
|
||||
while (len(str(val)) < count):
|
||||
temp = last_val
|
||||
last_val = val
|
||||
val += temp
|
||||
inc += 1
|
||||
|
||||
return inc + 2
|
||||
|
||||
if __name__ == '__main__':
|
||||
print "Answer : %d" % (fibo_dig_count(1000))
|
||||
23
e_48.py
Executable file
23
e_48.py
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env python
|
||||
"""
|
||||
##---
|
||||
# jlengrand
|
||||
#Created on : Mon Jan 16 15:47:00 CET 2012
|
||||
#
|
||||
# DESCRIPTION : Solves problem 48 of Project Euler
|
||||
The series, 1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317.
|
||||
Find the last ten digits of the series, 1^1 + 2^2 + 3^3 + ... + 1000^1000.
|
||||
##---
|
||||
"""
|
||||
def sum_pow(max_val):
|
||||
"""
|
||||
Returns the last 10 digits of 1^1 + ... + max_val^max_val
|
||||
"""
|
||||
summ = 0
|
||||
for j in range(1, max_val + 1):
|
||||
summ += pow(j, j)
|
||||
|
||||
return int(str(summ)[-10:])
|
||||
|
||||
if __name__ == '__main__':
|
||||
print "Answer : %d" % (sum_pow(1000))
|
||||
Reference in New Issue
Block a user