Add python solutions for first 10 problems

This commit is contained in:
daniele 2019-09-19 15:09:43 +02:00
parent 9fc4448a51
commit f165876a20
Signed by: fuxino
GPG Key ID: 6FE25B4A3EE16FDA
12 changed files with 366 additions and 1 deletions

View File

@ -29,7 +29,7 @@ int main(int argc, char **argv)
elapsed = (end.tv_sec - start.tv_sec) + (double)(end.tv_nsec - start.tv_nsec) / 1000000000;
printf("Project Euler, Problem 4\n");
printf("Answer: %d \n", max);
printf("Answer: %d\n", max);
printf("Elapsed time: %.9lf seconds\n", elapsed);

22
Python/p001.py Normal file
View File

@ -0,0 +1,22 @@
#!/usr/bin/python3
from timeit import default_timer
def main():
start = default_timer()
sum_ = 0
for i in range(3, 1000):
if i % 3 == 0 or i % 5 == 0:
sum_ += i
end = default_timer()
print('Project Euler, Problem 1')
print('Answer: {}'.format(sum_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

30
Python/p002.py Normal file
View File

@ -0,0 +1,30 @@
#!/usr/bin/python3
from timeit import default_timer
def main():
start = default_timer()
fib1 = 1
fib2 = 2
fibn = fib1 + fib2
sum_ = 2
while fibn < 4000000:
if fibn % 2 == 0:
sum_ = sum_ + fibn
fib1 = fib2
fib2 = fibn
fibn = fib1 + fib2
end = default_timer()
print('Project Euler, Problem 2')
print('Answer: {}'.format(sum_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

36
Python/p003.py Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/python3
import math
from timeit import default_timer
from projecteuler import is_prime
def max_prime_factor(num):
if is_prime(num):
return num
if num % 2 == 0:
return max_prime_factor(num / 2)
else:
limit = math.floor(math.sqrt(num)) + 1
for i in range(3, limit, 2):
if num % i == 0:
if is_prime(i):
return max_prime_factor(num / i)
def main():
start = default_timer()
res = max_prime_factor(600851475143)
end = default_timer()
print('Project Euler, Problem 3')
print('Answer: {}'.format(int(res)))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

39
Python/p004.py Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/python3
from timeit import default_timer
def is_palindrome(num, base):
reverse = 0
tmp = num
while tmp > 0:
reverse = reverse * base
reverse = reverse + tmp % base
tmp = int(tmp / base)
if num == reverse:
return 1
return 0
def main():
start = default_timer()
max_ = 0
for i in range(999, 99, -1):
for j in range(i, 99, -1):
num = i * j
if num > max_ and is_palindrome(num, 10):
max_ = num
end = default_timer()
print('Project Euler, Problem 4')
print('Answer: {}'.format(max_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

22
Python/p005.py Normal file
View File

@ -0,0 +1,22 @@
#!/usr/bin/python3
from timeit import default_timer
from projecteuler import lcmm
def main():
start = default_timer()
values = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
res = lcmm(values, 20)
end = default_timer()
print('Project Euler, Problem 5')
print('Answer: {}'.format(int(res)))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

24
Python/p006.py Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/python3
from timeit import default_timer
def main():
start = default_timer()
sum_squares = 0
square_sum = 0
for i in range(1, 101):
sum_squares = sum_squares + i * i
square_sum = square_sum + i
square_sum = square_sum * square_sum
end = default_timer()
print('Project Euler, Problem 6')
print('Answer: {}'.format(square_sum - sum_squares))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

26
Python/p007.py Normal file
View File

@ -0,0 +1,26 @@
#!/usr/bin/python3
from timeit import default_timer
from projecteuler import is_prime
def main():
start = default_timer()
count = 1
n = 1
while count != 10001:
n = n + 2
if is_prime(n):
count = count + 1
end = default_timer()
print('Project Euler, Problem 7')
print('Answer: {}'.format(n))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

50
Python/p008.py Normal file
View File

@ -0,0 +1,50 @@
#!/usr/bin/python3
from timeit import default_timer
def main():
start = default_timer()
number = '73167176531330624919225119674426574742355349194934' +\
'96983520312774506326239578318016984801869478851843' +\
'85861560789112949495459501737958331952853208805511' +\
'12540698747158523863050715693290963295227443043557' +\
'66896648950445244523161731856403098711121722383113' +\
'62229893423380308135336276614282806444486645238749' +\
'30358907296290491560440772390713810515859307960866' +\
'70172427121883998797908792274921901699720888093776' +\
'65727333001053367881220235421809751254540594752243' +\
'52584907711670556013604839586446706324415722155397' +\
'53697817977846174064955149290862569321978468622482' +\
'83972241375657056057490261407972968652414535100474' +\
'16427171479924442928230863465674813919123162824586' +\
'17866458359124566529476545682848912883142607690042' +\
'24219022671055626321111109370544217506941658960408' +\
'07198403850962455444362981230987879927244284909188' +\
'84580156166097919133875499200524063689912560717606' +\
'05886116467109405077541002256983155200055935729725' +\
'71636269561882670428252483600823257530420752963450'
number = list(map(int, number))
max_ = 0
for i in range(1000-13):
curr = number[i:i+13]
prod = 1
for j in range(len(curr)):
prod = prod * curr[j]
if prod > max_:
max_ = prod
end = default_timer()
print('Project Euler, Problem 8')
print('Answer: {}'.format(max_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

32
Python/p009.py Normal file
View File

@ -0,0 +1,32 @@
#!/usr/bin/python3
from timeit import default_timer
def main():
start = default_timer()
found = 0
m = 2
while not found:
for n in range(1, m):
a = m * m - n * n
b = 2 * m * n
c = m * m + n * n
if a + b + c == 1000:
found = 1
break
m = m + 1
end = default_timer()
print('Project Euler, Problem 9')
print('Answer: {}'.format(a * b * c))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

24
Python/p010.py Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/python3
from timeit import default_timer
from projecteuler import sieve
def main():
start = default_timer()
primes = sieve(2000000)
sum_ = 0
for i in range(2000000):
if primes[i]:
sum_ = sum_ + i
end = default_timer()
print('Project Euler, Problem 10')
print('Answer: {}'.format(sum_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

60
Python/projecteuler.py Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/python3
import math
from numpy import ndarray
def is_prime(num):
if num < 4:
return num == 2 or num == 3
if num % 2 == 0 or num % 3 == 0:
return 0
limit = math.floor(math.sqrt(num)) + 1
for i in range(5, limit, 6):
if num % i == 0 or num % (i + 2) == 0:
return 0
return 1
def gcd(a, b):
while b != 0:
tmp = b
b = a % b
a = tmp
return a
def lcm(a, b):
return a * b / gcd(a, b)
def lcmm(values, n):
if n == 2:
return lcm(values[0], values[1])
value = values[0]
for i in range(1, n):
return lcm(value, lcmm(values[i:], n-1))
def sieve(n):
primes = ndarray((n,), int)
primes[0] = 0
primes[1] = 0
primes[2] = 1
primes[3] = 1
for i in range(4, n, 2):
primes[i] = 0
primes[i+1] = 1
limit = math.floor(math.sqrt(n))
for i in range(3, limit, 2):
if primes[i]:
for j in range(i * i, n, 2 * i):
primes[j] = 0
return primes