From 2a1db7eda317743cbba978b00ae593cf23ecb5ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Doblas=20Jim=C3=A9nez?= Date: Mon, 20 Sep 2021 18:02:00 +0200 Subject: [PATCH] Reorganization --- src/Python/Problem001.py | 30 ---------------- src/Python/Problem002.py | 41 ---------------------- src/Python/Problem003.py | 34 ------------------ src/Python/Problem004.py | 36 ------------------- src/Python/Problem005.py | 41 ---------------------- src/Python/Problem006.py | 39 --------------------- src/Python/Problem007.py | 34 ------------------ src/Python/Problem008.py | 67 ----------------------------------- src/Python/Problem009.py | 38 -------------------- src/Python/Problem010.py | 30 ---------------- src/Python/Problem011.py | 75 ---------------------------------------- src/Python/Problem012.py | 67 ----------------------------------- src/Python/Problem013.py | 32 ----------------- src/Python/Problem014.py | 63 --------------------------------- src/Python/Problem015.py | 31 ----------------- src/Python/Problem016.py | 28 --------------- src/Python/Problem017.py | 62 --------------------------------- src/Python/Problem018.py | 56 ------------------------------ src/Python/Problem019.py | 44 ----------------------- src/Python/Problem020.py | 35 ------------------- src/Python/Problem021.py | 42 ---------------------- src/Python/Problem022.py | 42 ---------------------- src/Python/Problem023.py | 58 ------------------------------- src/Python/Problem024.py | 37 -------------------- src/Python/Problem025.py | 54 ----------------------------- src/Python/Problem026.py | 52 ---------------------------- src/Python/Problem027.py | 58 ------------------------------- src/Python/Problem028.py | 48 ------------------------- src/Python/Problem029.py | 38 -------------------- src/Python/Problem030.py | 42 ---------------------- src/Python/Problem031.py | 43 ----------------------- src/Python/Problem032.py | 45 ------------------------ src/Python/Problem033.py | 47 ------------------------- src/Python/Problem034.py | 41 ---------------------- src/Python/Problem035.py | 48 ------------------------- src/Python/Problem036.py | 35 ------------------- src/Python/Problem037.py | 46 ------------------------ src/Python/Problem038.py | 56 ------------------------------ src/Python/Problem039.py | 44 ----------------------- src/Python/Problem040.py | 43 ----------------------- src/Python/Problem041.py | 39 --------------------- src/Python/Problem042.py | 50 --------------------------- src/Python/Problem043.py | 55 ----------------------------- src/Python/Problem044.py | 48 ------------------------- src/Python/Problem045.py | 42 ---------------------- src/Python/Problem046.py | 48 ------------------------- src/Python/Problem047.py | 60 -------------------------------- src/Python/Problem048.py | 28 --------------- src/Python/Problem049.py | 41 ---------------------- src/Python/Problem050.py | 51 --------------------------- 50 files changed, 2264 deletions(-) delete mode 100644 src/Python/Problem001.py delete mode 100644 src/Python/Problem002.py delete mode 100644 src/Python/Problem003.py delete mode 100644 src/Python/Problem004.py delete mode 100644 src/Python/Problem005.py delete mode 100644 src/Python/Problem006.py delete mode 100644 src/Python/Problem007.py delete mode 100644 src/Python/Problem008.py delete mode 100644 src/Python/Problem009.py delete mode 100644 src/Python/Problem010.py delete mode 100644 src/Python/Problem011.py delete mode 100644 src/Python/Problem012.py delete mode 100644 src/Python/Problem013.py delete mode 100644 src/Python/Problem014.py delete mode 100644 src/Python/Problem015.py delete mode 100644 src/Python/Problem016.py delete mode 100644 src/Python/Problem017.py delete mode 100644 src/Python/Problem018.py delete mode 100644 src/Python/Problem019.py delete mode 100644 src/Python/Problem020.py delete mode 100644 src/Python/Problem021.py delete mode 100644 src/Python/Problem022.py delete mode 100644 src/Python/Problem023.py delete mode 100644 src/Python/Problem024.py delete mode 100644 src/Python/Problem025.py delete mode 100644 src/Python/Problem026.py delete mode 100644 src/Python/Problem027.py delete mode 100644 src/Python/Problem028.py delete mode 100644 src/Python/Problem029.py delete mode 100644 src/Python/Problem030.py delete mode 100644 src/Python/Problem031.py delete mode 100644 src/Python/Problem032.py delete mode 100644 src/Python/Problem033.py delete mode 100644 src/Python/Problem034.py delete mode 100644 src/Python/Problem035.py delete mode 100644 src/Python/Problem036.py delete mode 100644 src/Python/Problem037.py delete mode 100644 src/Python/Problem038.py delete mode 100644 src/Python/Problem039.py delete mode 100644 src/Python/Problem040.py delete mode 100644 src/Python/Problem041.py delete mode 100644 src/Python/Problem042.py delete mode 100644 src/Python/Problem043.py delete mode 100644 src/Python/Problem044.py delete mode 100644 src/Python/Problem045.py delete mode 100644 src/Python/Problem046.py delete mode 100644 src/Python/Problem047.py delete mode 100644 src/Python/Problem048.py delete mode 100644 src/Python/Problem049.py delete mode 100644 src/Python/Problem050.py diff --git a/src/Python/Problem001.py b/src/Python/Problem001.py deleted file mode 100644 index a3f9322..0000000 --- a/src/Python/Problem001.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/python3 -""" -Created on 14 Mar 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 1 of Project Euler -https://projecteuler.net/problem=1 -""" - -from utils import timeit - - -@timeit("Problem 1") -def compute(): - """ - If we list all the natural numbers below 10 that are multiples of 3 or 5, - we get 3, 5, 6 and 9. The sum of these multiples is 23. - - Find the sum of all the multiples of 3 or 5 below 1000. - """ - ans = sum(x for x in range(1000) if (x % 3 == 0 or x % 5 == 0)) - - return ans - - -if __name__ == "__main__": - - print(f"Result for problem 1: {compute()}") diff --git a/src/Python/Problem002.py b/src/Python/Problem002.py deleted file mode 100644 index 63676a5..0000000 --- a/src/Python/Problem002.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 14 Mar 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 2 of Project Euler -https://projecteuler.net/problem=2 -""" - -from utils import timeit - - -@timeit("Problem 2") -def compute(): - """ - Each new term in the Fibonacci sequence is generated by adding the - previous two terms. By starting with 1 and 2, the first 10 terms will be: - - 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - - Find the sum of all the even-valued terms in the sequence which do not - exceed four million. - """ - ans = 0 - limit = 4_000_000 - x, y = 1, 1 - z = x + y # Because every third Fibonacci number is even - while z <= limit: - ans += z - x = y + z - y = z + x - z = x + y - - return ans - - -if __name__ == "__main__": - - print(f"Result for problem 2: {compute()}") diff --git a/src/Python/Problem003.py b/src/Python/Problem003.py deleted file mode 100644 index 79dff45..0000000 --- a/src/Python/Problem003.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 18 Mar 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 3 of Project Euler -https://projecteuler.net/problem=3 -""" - -from utils import timeit - - -@timeit("Problem 3") -def compute(): - """ - The prime factors of 13195 are 5, 7, 13 and 29. - - What is the largest prime factor of the number 600851475143 ? - """ - ans = 600851475143 - factor = 2 - while factor * factor < ans: - while ans % factor == 0: - ans = ans // factor - factor += 1 - - return ans - - -if __name__ == "__main__": - - print(f"Result for problem 3: {compute()}") diff --git a/src/Python/Problem004.py b/src/Python/Problem004.py deleted file mode 100644 index bdb17d0..0000000 --- a/src/Python/Problem004.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 18 Mar 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 4 of Project Euler -https://projecteuler.net/problem=4 -""" - -from utils import timeit - - -@timeit("Problem 4") -def compute(): - """ - A palindromic number reads the same both ways. The largest palindrome made - from the product of two 2-digit numbers is 9009 = 91 x 99. - - Find the largest palindrome made from the product of two 3-digit numbers. - """ - ans = 0 - for i in range(100, 1000): - for j in range(100, 1000): - palindrome = i * j - s = str(palindrome) - if s == s[::-1] and palindrome > ans: - ans = palindrome - - return ans - - -if __name__ == "__main__": - - print(f"Result for problem 4: {compute()}") diff --git a/src/Python/Problem005.py b/src/Python/Problem005.py deleted file mode 100644 index fc9fe86..0000000 --- a/src/Python/Problem005.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 23 Apr 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 5 of Project Euler -https://projecteuler.net/problem=5 -""" - -import math -from utils import timeit - -# The LCM of two natural numbers x and y is given by: -# def lcm(x, y): -# return x * y // math.gcd(x, y) - -# It is possible to compute the LCM of more than two numbers by iteratively -# computing the LCM of two numbers, i.e. LCM(a, b, c) = LCM(a, LCM(b, c)) - - -@timeit("Problem 5") -def compute(): - """ - 2520 is the smallest number that can be divided by each of the numbers - from 1 to 10 without any remainder. - - What is the smallest positive number that is evenly divisible by all of - the numbers from 1 to 20? - """ - ans = 1 - for i in range(1, 21): - ans *= i // math.gcd(i, ans) - - return ans - - -if __name__ == "__main__": - - print(f"Result for problem 5: {compute()}") diff --git a/src/Python/Problem006.py b/src/Python/Problem006.py deleted file mode 100644 index ce8587c..0000000 --- a/src/Python/Problem006.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 17 Jun 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 6 of Project Euler -https://projecteuler.net/problem=6 -""" - -from utils import timeit - - -@timeit("Problem 6") -def compute(): - """ - The sum of the squares of the first ten natural numbers is, - 1^2 + 2^2 + ... + 10^2 = 385 - - The square of the sum of the first ten natural numbers is, - (1 + 2 + ... + 10)^2 = 55^2 = 3025 - - Hence the difference between the sum of the squares of the first ten - natural numbers and the square of the sum is 3025 − 385 = 2640. - - Find the difference between the sum of the squares of the first one - hundred natural numbers and the square of the sum. Statement - """ - n = 100 - square_of_sum = sum(i for i in range(1, n+1))**2 - sum_squares = sum(i**2 for i in range(1, n+1)) - diff = square_of_sum - sum_squares - return diff - - -if __name__ == "__main__": - - print(f"Result for Problem 6: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem007.py b/src/Python/Problem007.py deleted file mode 100644 index 6579580..0000000 --- a/src/Python/Problem007.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 28 Jun 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 7 of Project Euler -https://projecteuler.net/problem=7 -""" - -from utils import timeit, is_prime - - -@timeit("Problem 7") -def compute(): - """ - # Statement - """ - number = 2 - primeList = [] - while len(primeList) < 10001: - if is_prime(number): - primeList.append(number) - number += 1 - - ans = primeList[len(primeList)-1] - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 7: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem008.py b/src/Python/Problem008.py deleted file mode 100644 index 698dfb2..0000000 --- a/src/Python/Problem008.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 28 Abr 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 8 of Project Euler -https://projecteuler.net/problem=8 -""" - -from utils import timeit - - -@timeit("Problem 8") -def compute(): - """ - The four adjacent digits in the 1000-digit number that have the - greatest product are 9 × 9 × 8 × 9 = 5832. - - 731671...963450 - - Find the thirteen adjacent digits in the 1000-digit number that have - the greatest product. What is the value of this product? - """ - - NUM = """ - 73167176531330624919225119674426574742355349194934 - 96983520312774506326239578318016984801869478851843 - 85861560789112949495459501737958331952853208805511 - 12540698747158523863050715693290963295227443043557 - 66896648950445244523161731856403098711121722383113 - 62229893423380308135336276614282806444486645238749 - 30358907296290491560440772390713810515859307960866 - 70172427121883998797908792274921901699720888093776 - 65727333001053367881220235421809751254540594752243 - 52584907711670556013604839586446706324415722155397 - 53697817977846174064955149290862569321978468622482 - 83972241375657056057490261407972968652414535100474 - 82166370484403199890008895243450658541227588666881 - 16427171479924442928230863465674813919123162824586 - 17866458359124566529476545682848912883142607690042 - 24219022671055626321111109370544217506941658960408 - 07198403850962455444362981230987879927244284909188 - 84580156166097919133875499200524063689912560717606 - 05886116467109405077541002256983155200055935729725 - 71636269561882670428252483600823257530420752963450 - """ - num = NUM.replace('\n', '').replace(' ', '') - adjacent_digits = 13 - target = len(num) - adjacent_digits #- 1 - ans, i = 0, 0 - while i < target: - a, j = 1, i - while j < (i + adjacent_digits): - a = a * int(num[j]) - j += 1 - if a > ans: - ans = a - i += 1 - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 8: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem009.py b/src/Python/Problem009.py deleted file mode 100644 index 61722ab..0000000 --- a/src/Python/Problem009.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 26 Aug 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 9 of Project Euler -https://projecteuler.net/problem=9 -""" - -from utils import timeit - - -@timeit("Problem 9") -def compute(): - """ - A Pythagorean triplet is a set of three natural numbers, a < b < c, - for which a^2 + b^2 = c^2 - - For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. - - There exists exactly one Pythagorean triplet for which a + b + c = 1000. - Find the product abc. - """ - - upper_limit = 1000 - for a in range(1, upper_limit + 1): - for b in range(a + 1, upper_limit + 1): - c = upper_limit - a - b - if a * a + b * b == c * c: - # It is now implied that b < c, because we have a > 0 - return a * b * c - - -if __name__ == "__main__": - - print(f"Result for Problem 9: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem010.py b/src/Python/Problem010.py deleted file mode 100644 index b1b39f3..0000000 --- a/src/Python/Problem010.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 26 Aug 2017 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 10 of Project Euler -https://projecteuler.net/problem=10 -""" - -import math -from utils import timeit, list_primes - - -@timeit("Problem 10") -def compute(): - """ - The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. - - Find the sum of all the primes below two million. - """ - ans = sum(list_primes(1_999_999)) - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 10: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem011.py b/src/Python/Problem011.py deleted file mode 100644 index adce8c7..0000000 --- a/src/Python/Problem011.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 07 Jul 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 11 of Project Euler -https://projecteuler.net/problem=11 -""" - -from utils import timeit - -GRID = [ - [ 8, 2,22,97,38,15, 0,40, 0,75, 4, 5, 7,78,52,12,50,77,91, 8], - [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48, 4,56,62, 0], - [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30, 3,49,13,36,65], - [52,70,95,23, 4,60,11,42,69,24,68,56, 1,32,56,71,37, 2,36,91], - [22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80], - [24,47,32,60,99, 3,45, 2,44,75,33,53,78,36,84,20,35,17,12,50], - [32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70], - [67,26,20,68, 2,62,12,20,95,63,94,39,63, 8,40,91,66,49,94,21], - [24,55,58, 5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72], - [21,36,23, 9,75, 0,76,44,20,45,35,14, 0,61,33,97,34,31,33,95], - [78,17,53,28,22,75,31,67,15,94, 3,80, 4,62,16,14, 9,53,56,92], - [16,39, 5,42,96,35,31,47,55,58,88,24, 0,17,54,24,36,29,85,57], - [86,56, 0,48,35,71,89, 7, 5,44,44,37,44,60,21,58,51,54,17,58], - [19,80,81,68, 5,94,47,69,28,73,92,13,86,52,17,77, 4,89,55,40], - [ 4,52, 8,83,97,35,99,16, 7,97,57,32,16,26,26,79,33,27,98,66], - [88,36,68,87,57,62,20,72, 3,46,33,67,46,55,12,32,63,93,53,69], - [ 4,42,16,73,38,25,39,11,24,94,72,18, 8,46,29,32,40,62,76,36], - [20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74, 4,36,16], - [20,73,35,29,78,31,90, 1,74,31,49,71,48,86,81,16,23,57, 5,54], - [ 1,70,54,71,83,51,54,69,16,92,33,48,61,43,52, 1,89,19,67,48] -] - -def grid_product(x, y, dx, dy, n): - result = 1 - for i in range(n): - result *= GRID[y + i * dy][x + i * dx] - return result - - -@timeit("Problem 11") -def compute(): - """ - In the 20x20 grid above, four numbers along a diagonal line have been - marked in red. - - The product of these numbers is 26 x 63 x 78 x 14 = 1788696. - - What is the greatest product of four adjacent numbers in any direction - (up, down, left, right, or diagonally) in the 20x20 grid? - """ - - ans = 0 - width = height = len(GRID) - adjacent_nums = 4 - for y in range(height): - for x in range(width): - if x + adjacent_nums <= width: - ans = max(grid_product(x, y, 1, 0, adjacent_nums), ans) - if y + adjacent_nums <= height: - ans = max(grid_product(x, y, 0, 1, adjacent_nums), ans) - if x + adjacent_nums <= width and y + adjacent_nums <= height: - ans = max(grid_product(x, y, 1, 1, adjacent_nums), ans) - if x - adjacent_nums >= -1 and y + adjacent_nums <= height: - ans = max(grid_product(x, y, -1, 1, adjacent_nums), ans) - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 11: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem012.py b/src/Python/Problem012.py deleted file mode 100644 index fd7064b..0000000 --- a/src/Python/Problem012.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 01 Jan 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 12 of Project Euler -https://projecteuler.net/problem=12 -""" - -import itertools -from utils import timeit -from math import sqrt, floor - - -# Returns the number of integers in the range [1, n] that divide n. -def num_divisors(n): - end = floor(sqrt(n)) - divs = [] - for i in range(1, end + 1): - if n % i == 0: - divs.append(i) - if end**2 == n: - divs.pop() - return 2*len(divs) - - - -@timeit("Problem 12") -def compute(): - """ - The sequence of triangle numbers is generated by adding the natural - numbers. So the 7th triangle number would be: - 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. - - The first ten terms would be: - 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - - Let us list the factors of the first seven triangle numbers: - - 1: 1 - 3: 1,3 - 6: 1,2,3,6 - 10: 1,2,5,10 - 15: 1,3,5,15 - 21: 1,3,7,21 - 28: 1,2,4,7,14,28 - - We can see that 28 is the first triangle number to have over five divisors. - - What is the value of the first triangle number to have over five hundred - divisors? - """ - - triangle = 0 - for i in itertools.count(1): - # This is the ith triangle number, i.e. num = 1 + 2 + ... + i = - # = i*(i+1)/2 - triangle += i - if num_divisors(triangle) > 500: - return str(triangle) - - -if __name__ == "__main__": - - print(f"Result for Problem 12: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem013.py b/src/Python/Problem013.py deleted file mode 100644 index 8696a60..0000000 --- a/src/Python/Problem013.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 1 Jan 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 13 of Project Euler -https://projecteuler.net/problem=13 -""" - -from utils import timeit - - -@timeit("Problem 13") -def compute(): - """ - Work out the first ten digits of the sum of the following one-hundred - 50-digit numbers. - """ - - with open("../files/Problem13.txt", "r") as f: - num = f.readlines() - result = 0 - for line in num: - result += int(line) - return str(result)[:10] - - -if __name__ == "__main__": - - print(f"Result for Problem 13: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem014.py b/src/Python/Problem014.py deleted file mode 100644 index d7cd502..0000000 --- a/src/Python/Problem014.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 7 Jan 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 14 of Project Euler -https://projecteuler.net/problem=14 -""" - -from utils import timeit - -def chain_length(n, terms): - length = 0 - while n != 1: - if n in terms: - length += terms[n] - break - if n % 2 == 0: - n = n / 2 - else: - n = 3 * n + 1 - length += 1 - return length - -@timeit("Problem 14") -def compute(): - """ - The following iterative sequence is defined for the set of positive - integers: - - n → n/2 (n is even) - n → 3n + 1 (n is odd) - - Using the rule above and starting with 13, we generate the following - sequence: - - 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 - - It can be seen that this sequence (starting at 13 and finishing at 1) - contains 10 terms. Although it has not been proved yet (Collatz Problem), - it is thought that all starting numbers finish at 1. - - Which starting number, under one million, produces the longest chain? - - NOTE: Once the chain starts the terms are allowed to go above one million. - """ - ans = 0 - limit = 1_000_000 - score = 0 - terms = dict() - for i in range(1, limit): - terms[i] = chain_length(i, terms) - if terms[i] > score: - score = terms[i] - ans = i - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 14: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem015.py b/src/Python/Problem015.py deleted file mode 100644 index c8e2334..0000000 --- a/src/Python/Problem015.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 7 Jan 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 15 of Project Euler -https://projecteuler.net/problem=15 -""" - -from math import factorial -from utils import timeit - - -@timeit("Problem 15") -def compute(): - """ - Starting in the top left corner of a 2×2 grid, and only being able to - move to the right and down, there are exactly 6 routes to the bottom - right corner. - - How many such routes are there through a 20×20 grid? - """ - n = 20 - return int(factorial(2*n) / (factorial(n) * factorial(2*n - n))) - - -if __name__ == "__main__": - - print(f"Result for Problem 15: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem016.py b/src/Python/Problem016.py deleted file mode 100644 index 41cbaa2..0000000 --- a/src/Python/Problem016.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 13 Jan 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 16 of Project Euler -https://projecteuler.net/problem=16 -""" - -from utils import timeit - - -@timeit("Problem 16") -def compute(): - """ - 2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. - - What is the sum of the digits of the number 2^1000? - """ - n = 1000 - return sum(int(digit) for digit in str(2**n)) - - -if __name__ == "__main__": - - print(f"Result for Problem 16: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem017.py b/src/Python/Problem017.py deleted file mode 100644 index 48953ee..0000000 --- a/src/Python/Problem017.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 13 Jan 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 17 of Project Euler -https://projecteuler.net/problem=17 -""" - -from utils import timeit - -def num2letters(num): - nums = {0: '', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', - 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', - 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', - 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', - 19: 'nineteen', 20: 'twenty', 30: 'thirty', 40: 'forty', - 50: 'fifty', 60: 'sixty', 70: 'seventy', 80: 'eighty', - 90: 'ninety', 100: 'hundred', 1000: 'thousand'} - - if num <= 20: - return len(nums[num]) - elif num < 100: - tens, units = divmod(num, 10) - return len(nums[tens * 10]) + num2letters(units) - elif num < 1000: - hundreds, rest = divmod(num, 100) - if rest: - return num2letters(hundreds) + len(nums[100]) + len('and') +\ - num2letters(rest) - else: - return num2letters(hundreds) + len(nums[100]) - else: - thousands, rest = divmod(num, 1000) - return num2letters(thousands) + len(nums[1000]) - -@timeit("Problem 17") -def compute(): - """ - If the numbers 1 to 5 are written out in words: one, two, three, four, - five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total. - - If all the numbers from 1 to 1000 (one thousand) inclusive were written - out in words, how many letters would be used? - - NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and - forty-two) contains 23 letters and 115 (one hundred and fifteen) contains - 20 letters. The use of "and" when writing out numbers is in compliance - with British usage. - """ - n = 1000 - letters = 0 - for num in range(1, n + 1): - letters += num2letters(num) - return letters - - -if __name__ == "__main__": - - print(f"Result for Problem 17: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem018.py b/src/Python/Problem018.py deleted file mode 100644 index e4b86c9..0000000 --- a/src/Python/Problem018.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 15 Sep 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 18 of Project Euler -https://projecteuler.net/problem=18 -""" - -from utils import timeit - -triangle = [ # Mutable - [75], - [95,64], - [17,47,82], - [18,35,87,10], - [20, 4,82,47,65], - [19, 1,23,75, 3,34], - [88, 2,77,73, 7,63,67], - [99,65, 4,28, 6,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, 4,68,89,53,67,30,73,16,69,87,40,31], - [ 4,62,98,27,23, 9,70,98,73,93,38,53,60, 4,23], -] - -@timeit("Problem 18") -def compute(): - """ - 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 above - """ - for i in reversed(range(len(triangle) - 1)): - for j in range(len(triangle[i])): - triangle[i][j] += max(triangle[i + 1][j], triangle[i + 1][j + 1]) - - return triangle[0][0] - - -if __name__ == "__main__": - - print(f"Result for Problem 18: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem019.py b/src/Python/Problem019.py deleted file mode 100644 index 1714209..0000000 --- a/src/Python/Problem019.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 15 Sep 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 19 of Project Euler -https://projecteuler.net/problem=19 -""" - -from datetime import date -from utils import timeit - - -@timeit("Problem 19") -def compute(): - """ - You are given the following information, but you may prefer to do some - research for yourself. - - 1 Jan 1900 was a Monday. - Thirty days has September, April, June and November. - All the rest have thirty-one, - Saving February alone, - Which has twenty-eight, rain or shine. - And on leap years, twenty-nine. - A leap year occurs on any year evenly divisible by 4, but not on a century - unless it is divisible by 400. - - How many Sundays fell on the first of the month during the twentieth - century (1 Jan 1901 to 31 Dec 2000)? - """ - sundays = 0 - for y in range(1901, 2001): - for m in range (1, 13): - if date(y, m, 1).weekday() == 6: - sundays += 1 - return sundays - - -if __name__ == "__main__": - - print(f"Result for Problem 19: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem020.py b/src/Python/Problem020.py deleted file mode 100644 index 3cdff2c..0000000 --- a/src/Python/Problem020.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 15 Sep 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 20 of Project Euler -https://projecteuler.net/problem=20 -""" - -from math import factorial -from utils import timeit - - -@timeit("Problem 20") -def compute(): - """ - n! means n × (n − 1) × ... × 3 × 2 × 1 - - For example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800, - and the sum of the digits in the number 10! is: - 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27. - - Find the sum of the digits in the number 100! - """ - fact = factorial(100) - sum_digits = sum(int(digit) for digit in str(fact)) - - return sum_digits - - -if __name__ == "__main__": - - print(f"Result for Problem 20: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem021.py b/src/Python/Problem021.py deleted file mode 100644 index 1ea1f43..0000000 --- a/src/Python/Problem021.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 15 Sep 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 21 of Project Euler -https://projecteuler.net/problem=21 -""" - -from utils import timeit - -def sum_divisors(n): - return sum(i for i in range(1, n//2+1) if n%i==0) - -@timeit("Problem 21") -def compute(): - """ - 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. - """ - n = 10000 - sum_amicable = 0 - for i in range(1, n): - value = sum_divisors(i) - if i != value and sum_divisors(value) == i: - sum_amicable += i - return sum_amicable - - -if __name__ == "__main__": - - print(f"Result for Problem 21: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem022.py b/src/Python/Problem022.py deleted file mode 100644 index a0861dd..0000000 --- a/src/Python/Problem022.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 31 Dec 2018 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 22 of Project Euler -https://projecteuler.net/problem=22 -""" - -from pathlib import Path -from utils import timeit - - -@timeit("Problem 22") -def compute(): - """ - Using names.txt, a 46K text file containing over five-thousand first names, - begin by sorting it into alphabetical order. Then working out the - alphabetical value for each name, multiply this value by its alphabetical - position in the list to obtain a name score. - - For example, when the list is sorted into alphabetical order, COLIN, which - is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, - COLIN would obtain a score of 938 × 53 = 49714. - - What is the total of all the name scores in the file? - """ - file = Path("/datos/Scripts/Gitea/Project_Euler/src/files/Problem22.txt") - with open(file, 'r') as f: - names = sorted(f.read().replace('"', '').split(',')) - - result = 0 - for idx, name in enumerate(names, 1): - result += sum(ord(c) - 64 for c in name) * idx - return result - - -if __name__ == "__main__": - - print(f"Result for Problem 22: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem023.py b/src/Python/Problem023.py deleted file mode 100644 index a860df9..0000000 --- a/src/Python/Problem023.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 05 Jan 2019 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 23 of Project Euler -https://projecteuler.net/problem=23 -""" - -from utils import timeit - - -@timeit("Problem 23") -def compute(): - """ - A perfect number is a number for which the sum of its proper divisors is - exactly equal to the number. For example, the sum of the proper divisors - of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect - number. - - A number n is called deficient if the sum of its proper divisors is less - than n and it is called abundant if this sum exceeds n. - - As 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest - number that can be written as the sum of two abundant numbers is 24. By - mathematical analysis, it can be shown that all integers greater than 28123 - can be written as the sum of two abundant numbers. However, this upper - limit cannot be reduced any further by analysis even though it is known - that the greatest number that cannot be expressed as the sum of two - abundant numbers is less than this limit. - - Find the sum of all the positive integers which cannot be written as the - sum of two abundant numbers. - """ - LIMIT = 28124 - divisorsum = [0] * LIMIT - for i in range(1, LIMIT): - for j in range(i * 2, LIMIT, i): - divisorsum[j] += i - abundantnums = [i for (i, x) in enumerate(divisorsum) if x > i] - - expressible = [False] * LIMIT - for i in abundantnums: - for j in abundantnums: - if i + j < LIMIT: - expressible[i + j] = True - else: - break - - ans = sum(i for (i, x) in enumerate(expressible) if not x) - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 23: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem024.py b/src/Python/Problem024.py deleted file mode 100644 index 00d5bbd..0000000 --- a/src/Python/Problem024.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 11 Sep 2019 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 24 of Project Euler -https://projecteuler.net/problem=24 -""" - -from itertools import permutations -from utils import timeit - - -@timeit("Problem 24") -def compute(): - """ - A permutation is an ordered arrangement of objects. For example, 3124 is - one possible permutation of the digits 1, 2, 3 and 4. If all of the - permutations are listed numerically or alphabetically, we call it - lexicographic order. The lexicographic permutations of 0, 1 and 2 are: - - 012 021 102 120 201 210 - - What is the millionth lexicographic permutation of the digits - 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9? - """ - digits = list(range(10)) - _permutations = list(permutations(digits)) - print(_permutations[0]) - return "".join(str(digit) for digit in _permutations[999999]) - - -if __name__ == "__main__": - - print(f"Result for Problem 24: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem025.py b/src/Python/Problem025.py deleted file mode 100644 index 5cb47c5..0000000 --- a/src/Python/Problem025.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 11 Sep 2019 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 25 of Project Euler -https://projecteuler.net/problem=25 -""" - -from utils import timeit - - -@timeit("Problem 25") -def compute(): - """ - The Fibonacci sequence is defined by the recurrence relation: - - Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1. - - Hence the first 12 terms will be: - - F1 = 1 - F2 = 1 - F3 = 2 - F4 = 3 - F5 = 5 - F6 = 8 - F7 = 13 - F8 = 21 - F9 = 34 - F10 = 55 - F11 = 89 - F12 = 144 - - The 12th term, F12, is the first term to contain three digits. - - What is the index of the first term in the Fibonacci sequence to - contain 1000 digits? - """ - a, b = 1, 1 - index = 2 - - while len(str(b)) < 1000: - a, b = b, b+a - index += 1 - - return index - - -if __name__ == "__main__": - - print(f"Result for Problem 25: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem026.py b/src/Python/Problem026.py deleted file mode 100644 index 0687ba8..0000000 --- a/src/Python/Problem026.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 11 Sep 2019 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 26 of Project Euler -https://projecteuler.net/problem=26 -""" - -from utils import timeit - - -@timeit("Problem 26") -def compute(): - """ - A unit fraction contains 1 in the numerator. The decimal representation - of the unit fractions with denominators 2 to 10 are given: - - 1/2 = 0.5 - 1/3 = 0.(3) - 1/4 = 0.25 - 1/5 = 0.2 - 1/6 = 0.1(6) - 1/7 = 0.(142857) - 1/8 = 0.125 - 1/9 = 0.(1) - 1/10 = 0.1 - - Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. - It can be seen that 1/7 has a 6-digit recurring cycle. - - Find the value of d < 1000 for which 1/d contains the longest recurring - cycle in its decimal fraction part. - """ - cycle_length = 0 - number_d = 0 - for number in range(3, 1000, 2): - if number % 5 == 0: - continue - p = 1 - while 10**p % number != 1: - p += 1 - if p > cycle_length: - cycle_length, number_d = p, number - return number_d - - -if __name__ == "__main__": - - print(f"Result for Problem 26: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem027.py b/src/Python/Problem027.py deleted file mode 100644 index 4bb74e1..0000000 --- a/src/Python/Problem027.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 15 Sep 2019 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 27 of Project Euler -https://projecteuler.net/problem=27 -""" - -from utils import timeit, is_prime - - -@timeit("Problem 27") -def compute(): - """ - Euler discovered the remarkable quadratic formula: - - n^2 + n + 41 - - It turns out that the formula will produce 40 primes for the consecutive - integer values 0≤n≤39. However, when n=40, 40^2+40+41=40(40+1)+41 is - divisible by 41, and certainly when n=41,41^2+41+41 is clearly divisible - by 41. - - The incredible formula n^2−79n+1601 was discovered, which produces 80 - primes for the consecutive values 0≤n≤79. The product of the coefficients, - −79 and 1601, is −126479. - - Considering quadratics of the form: - - n^2 + an + b - - where |a|<1000, |b|≤1000 and |n| is the modulus/absolute value of n - e.g. |11|=11 and |−4|=4 - - Find the product of the coefficients, a and b, for the quadratic expression - that produces the maximum number of primes for consecutive values of n, - starting with n=0. - """ - LIMIT = 1000 - consecutive_values = 0 - - for a in range(-999, LIMIT): - for b in range(LIMIT + 1): - n = 0 - while is_prime(abs((n ** 2) + (a * n) + b)): - n += 1 - if n > consecutive_values: - consecutive_values = n - c = a * b - return c - - -if __name__ == "__main__": - - print(f"Result for Problem 27: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem028.py b/src/Python/Problem028.py deleted file mode 100644 index 06afe91..0000000 --- a/src/Python/Problem028.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 3 Jan 2020 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 28 of Project Euler -https://projecteuler.net/problem=28 -""" - -from utils import timeit - - -@timeit("Problem 28") -def compute(): - """ - Starting with the number 1 and moving to the right in a clockwise - direction a 5 by 5 spiral is formed as follows: - - 21 22 23 24 25 - 20 7 8 9 10 - 19 6 1 2 11 - 18 5 4 3 12 - 17 16 15 14 13 - - It can be verified that the sum of the numbers on the diagonals is 101. - - What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral - formed in the same way? - """ - size = 1001 # Must be odd - ans = 1 # Special case for size 1 - step = 0 - i, cur = 1, 1 - while step < size-1: - step = i * 2 - for j in range(1, 5): - cur += step - ans += cur - i += 1 - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 28: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem029.py b/src/Python/Problem029.py deleted file mode 100644 index 1b95808..0000000 --- a/src/Python/Problem029.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 3 Jan 2020 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 29 of Project Euler -https://projecteuler.net/problem=29 -""" - -from utils import timeit - - -@timeit("Problem 29") -def compute(): - """ - Consider all integer combinations of ab for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5: - - 2^2=4, 2^3=8, 2^4=16, 2^5=32 - 3^2=9, 3^3=27, 3^4=81, 3^5=243 - 4^2=16, 4^3=64, 4^4=256, 4^5=1024 - 5^2=25, 5^3=125, 5^4=625, 5^5=3125 - - If they are then placed in numerical order, with any repeats removed, we - get the following sequence of 15 distinct terms: - - 4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125 - - How many distinct terms are in the sequence generated by ab for 2≤a≤100 - and 2≤b≤100? - """ - terms = set(a**b for a in range(2, 101) for b in range(2, 101)) - return len(terms) - -if __name__ == "__main__": - - print(f"Result for Problem 29: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem030.py b/src/Python/Problem030.py deleted file mode 100644 index 5fc595b..0000000 --- a/src/Python/Problem030.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 3 Jan 2020 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 30 of Project Euler -https://projecteuler.net/problem=30 -""" - -from utils import timeit - - -@timeit("Problem 30") -def compute(): - """ - Surprisingly there are only three numbers that can be written as the sum - of fourth powers of their digits: - - 1634 = 1^4 + 6^4 + 3^4 + 4^4 - 8208 = 8^4 + 2^4 + 0^4 + 8^4 - 9474 = 9^4 + 4^4 + 7^4 + 4^4 - - As 1 = 14 is not a sum it is not included. - - The sum of these numbers is 1634 + 8208 + 9474 = 19316. - - Find the sum of all the numbers that can be written as the sum of fifth - powers of their digits. - """ - - def power_digit_sum(pow, n): - return sum(int(c)**pow for c in str(n)) - - ans = sum(i for i in range(2, 1000000) if i == power_digit_sum(5, i)) - - return ans - -if __name__ == "__main__": - - print(f"Result for Problem 30: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem031.py b/src/Python/Problem031.py deleted file mode 100644 index 7a0a3a6..0000000 --- a/src/Python/Problem031.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 24 Feb 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 31 of Project Euler -https://projecteuler.net/problem=31 -""" - -from itertools import product -from utils import timeit - - -@timeit("Problem 31") -def compute(): - """ - In the United Kingdom the currency is made up of pound (£) and pence (p). - There are eight coins in general circulation: - - 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p), and £2 (200p). - - It is possible to make £2 in the following way: - - 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p - - How many different ways can £2 be made using any number of coins? - """ - no_ways = 0 - - coins = [2, 5, 10, 20, 50, 100] - - bunch_of_coins = product(*[range(0, 201, i) for i in coins]) - for money in bunch_of_coins: - if sum(money) <= 200: - no_ways += 1 - # consider also the case for 200 coins of 1p - return no_ways + 1 - -if __name__ == "__main__": - - print(f"Result for Problem 31: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem032.py b/src/Python/Problem032.py deleted file mode 100644 index 3640e05..0000000 --- a/src/Python/Problem032.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 26 Feb 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 32 of Project Euler -https://projecteuler.net/problem=32 -""" - -from utils import timeit - - -@timeit("Problem 32") -def compute(): - """ - We shall say that an n-digit number is pandigital if it makes use of all - the digits 1 to n exactly once; for example, the 5-digit number, 15234, is - 1 through 5 pandigital. - - The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing - multiplicand, multiplier, and product is 1 through 9 pandigital. - - Find the sum of all products whose multiplicand/multiplier/product identity - can be written as a 1 through 9 pandigital. - HINT: Some products can be obtained in more than one way so be sure to only - include it once in your sum. - """ - - ans = set() - pandigital = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] - - for x in range(1, 100): - for y in range(100, 10000): - # product = x * y - if sorted(str(x) + str(y) + str(x * y)) == pandigital: - ans.add(x * y) - - return sum(ans) - - -if __name__ == "__main__": - - print(f"Result for Problem 32: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem033.py b/src/Python/Problem033.py deleted file mode 100644 index 70a687a..0000000 --- a/src/Python/Problem033.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 04 Mar 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 33 of Project Euler -https://projecteuler.net/problem=33 -""" - -from utils import timeit - - -@timeit("Problem 33") - -def compute(): - """ - The fraction 49/98 is a curious fraction, as an inexperienced mathematician - in attempting to simplify it may incorrectly believe that 49/98 = 4/8, - which is correct, is obtained by cancelling the 9s. - - We shall consider fractions like, 30/50 = 3/5, to be trivial examples. - - There are exactly four non-trivial examples of this type of fraction, less - than one in value, and containing two digits in the numerator and denominator. - - If the product of these four fractions is given in its lowest common terms, - find the value of the denominator. - """ - numerator = 1 - denominator = 1 - for x in range(10, 100): - for y in range(10, 100): - if x < y: - if str(x)[1] == str(y)[0]: - if int(str(y)[1]) != 0: - if int(str(x)[0]) / int(str(y)[1]) == x / y: - numerator *= x - denominator *= y - - return int(denominator/numerator) - - -if __name__ == "__main__": - - print(f"Result for Problem 33: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem034.py b/src/Python/Problem034.py deleted file mode 100644 index 8d05b5e..0000000 --- a/src/Python/Problem034.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 02 Apr 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 34 of Project Euler -https://projecteuler.net/problem=34 -""" - -import math -from utils import timeit - - -@timeit("Problem 34") -def compute(): - """ - 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. - - Find the sum of all numbers which are equal to the sum of the factorial - of their digits. - - Note: As 1! = 1 and 2! = 2 are not sums they are not included. - """ - - ans = 0 - - for num in range(10,2540160): - sum_of_factorial = 0 - for digit in str(num): - sum_of_factorial += math.factorial(int(digit)) - if sum_of_factorial == num: - ans += sum_of_factorial - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 34: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem035.py b/src/Python/Problem035.py deleted file mode 100644 index 27e92a7..0000000 --- a/src/Python/Problem035.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 02 Apr 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 35 of Project Euler -https://projecteuler.net/problem=35 -""" - -from utils import timeit, is_prime - -def circular_number(n): - n = str(n) - result = [] - for i in range(len(n)): - result.append(int(n[i:] + n[:i])) - return result - -@timeit("Problem 35") -def compute(): - """ - The number, 197, is called a circular prime because all rotations of the - digits: 197, 971, and 719, are themselves prime. - - There are thirteen such primes below 100: - 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97. - - How many circular primes are there below one million? - """ - circular_primes = [] - for i in range(2, 1_000_000): - if is_prime(i): - all_primes = True - for j in circular_number(i): - if not is_prime(j): - all_primes = False - break - if all_primes: - circular_primes.append(i) - - return len(circular_primes) - - -if __name__ == "__main__": - - print(f"Result for Problem 35: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem036.py b/src/Python/Problem036.py deleted file mode 100644 index 4043417..0000000 --- a/src/Python/Problem036.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 08 Apr 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 36 of Project Euler -https://projecteuler.net/problem=36 -""" - -from utils import timeit - -def is_palidrome(num): - return str(num) == str(num)[::-1] - -@timeit("Problem 36") -def compute(): - """ - The decimal number, 585 = 1001001001_2 (binary), is palindromic - in both bases. - - Find the sum of all numbers, less than one million, which are palindromic - in base 10 and base 2. - """ - ans = 0 - for i in range(1, 1_000_001, 2): - if is_palidrome(i) and is_palidrome(bin(i)[2:]): - ans += i - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 36: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem037.py b/src/Python/Problem037.py deleted file mode 100644 index 51d52c3..0000000 --- a/src/Python/Problem037.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 09 Apr 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 37 of Project Euler -https://projecteuler.net/problem=37 -""" - -from utils import timeit, list_primes, is_prime - -def is_truncatable_prime(number): - num_str = str(number) - for i in range(1, len(num_str)): - if not is_prime(int(num_str[i:])) or not is_prime(int(num_str[:-i])): - return False - - return True - -@timeit("Problem 37") -def compute(): - """ - The number 3797 has an interesting property. Being prime itself, it is - possible to continuously remove digits from left to right, and remain - prime at each stage: 3797, 797, 97, and 7. - Similarly we can work from right to left: 3797, 379, 37, and 3. - - Find the sum of the only eleven primes that are both truncatable from left - to right and right to left. - - NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes. - """ - ans = 0 - primes = list_primes(1_000_000) - # Statement of the problem says this - for number in primes[4:]: - if is_truncatable_prime(number): - ans += number - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 37: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem038.py b/src/Python/Problem038.py deleted file mode 100644 index bb38c86..0000000 --- a/src/Python/Problem038.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 03 Jun 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 38 of Project Euler -https://projecteuler.net/problem=38 -""" - -from utils import timeit - - -@timeit("Problem 38") -def compute(): - """ - Take the number 192 and multiply it by each of 1, 2, and 3: - - 192 × 1 = 192 - 192 × 2 = 384 - 192 × 3 = 576 - - By concatenating each product we get the 1 to 9 pandigital, - 192384576. We will call 192384576 the concatenated product of - 192 and (1,2,3) - - The same can be achieved by starting with 9 and multiplying by - 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is - the concatenated product of 9 and (1,2,3,4,5). - - What is the largest 1 to 9 pandigital 9-digit number that can - be formed as the concatenated product of an integer with - (1,2, ... , n) where n > 1? - - """ - - results = [] - # Number must 4 digits (exactly) to be pandigital - # if n > 1 - for i in range(1, 10_000): - integer = 1 - number = "" - while len(number) < 9: - number += str(integer * i) - if sorted(number) == list('123456789'): - results.append(number) - - integer += 1 - - return max(results) - - -if __name__ == "__main__": - - print(f"Result for Problem 38: {compute()}") diff --git a/src/Python/Problem039.py b/src/Python/Problem039.py deleted file mode 100644 index f2d979d..0000000 --- a/src/Python/Problem039.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 05 Jun 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 39 of Project Euler -https://projecteuler.net/problem=39 -""" - -from utils import timeit - - -@timeit("Problem 39") -def compute(): - """ - If p is the perimeter of a right angle triangle with integral length sides, - {a,b,c}, there are exactly three solutions for p = 120: - - {20,48,52}, {24,45,51}, {30,40,50} - - For which value of p ≤ 1000, is the number of solutions maximised? - """ - ans, val = 0, 0 - for p in range(2, 1001, 2): - sol = 0 - for a in range(1, p): - for b in range(a+1, p-2*a): - c = p - (a + b) - if a**2 + b**2 == c**2: - sol += 1 - elif a**2 + b**2 > c**2: - # As we continue our innermost loop, the left side - # gets bigger, right gets smaller, so we're done here - break - if sol > ans: - ans, val = sol, p - - return val - -if __name__ == "__main__": - - print(f"Result for Problem 39: {compute()}") diff --git a/src/Python/Problem040.py b/src/Python/Problem040.py deleted file mode 100644 index 47831e7..0000000 --- a/src/Python/Problem040.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 23 Jun 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 40 of Project Euler -https://projecteuler.net/problem=40 -""" - -from utils import timeit - - -@timeit("Problem 40") -def compute(): - """ - An irrational decimal fraction is created by concatenating the positive integers: - - 0.123456789101112131415161718192021... - - It can be seen that the 12th digit of the fractional part is 1. - - If d_n represents the n^th digit of the fractional part, find the value of the following expression. - - d_1 × d_{10} × d_{100} × d_{1_000} × d_{10_000} × d_{100_000} × d_{1_000_000} - - """ - - fraction = '' - for i in range(1, 1_000_000): - fraction += str(i) - - ans = 1 - for i in range(7): - ans*= int(fraction[10**i - 1]) - - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 40: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem041.py b/src/Python/Problem041.py deleted file mode 100644 index e205291..0000000 --- a/src/Python/Problem041.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 29 Jun 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 41 of Project Euler -https://projecteuler.net/problem=41 -""" - -from utils import timeit, is_prime - - -@timeit("Problem 41") -def compute(): - """ - We shall say that an n-digit number is pandigital if it makes - use of all the digits 1 to n exactly once. For example, 2143 is - a 4-digit pandigital and is also prime. - - What is the largest n-digit pandigital prime that exists? - """ - def is_pandigital(number): - number = sorted(str(number)) - check = [str(i) for i in range(1, len(number)+1)] - if number == check: - return True - return False - - - for ans in range(7654321, 1, -1): - if is_pandigital(ans): - if is_prime(ans): - return ans - -if __name__ == "__main__": - - print(f"Result for Problem 41: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem042.py b/src/Python/Problem042.py deleted file mode 100644 index 4019767..0000000 --- a/src/Python/Problem042.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 26 Jul 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 42 of Project Euler -https://projecteuler.net/problem=42 -""" - -from utils import timeit - - -@timeit("Problem 42") -def compute(): - """ - The nth term of the sequence of triangle numbers is given by, tn = ½n(n+1); - so the first ten triangle numbers are: - - 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - - By converting each letter in a word to a number corresponding to its alphabetical - position and adding these values we form a word value. For example, the word value - for SKY is 19 + 11 + 25 = 55 = t10. If the word value is a triangle number then we - shall call the word a triangle word. - - Using words.txt, a 16K text file containing nearly two-thousand common English words, - how many are triangle words? - """ - - def triangle_number(num): - return int(0.5*num*(num+1)) - - def word_to_value(word): - return sum(ord(letter)-64 for letter in word) - - triangular_numbers = [triangle_number(n) for n in range(27)] - ans = 0 - with open("files/Problem42.txt", "r") as f: - words = f.readline().strip('"').split('","') - for word in words: - if word_to_value(word) in triangular_numbers: - ans += 1 - - return ans - -if __name__ == "__main__": - - print(f"Result for Problem 42: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem043.py b/src/Python/Problem043.py deleted file mode 100644 index f944fb9..0000000 --- a/src/Python/Problem043.py +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 03 Aug 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 43 of Project Euler -https://projecteuler.net/problem=43 -""" - -from itertools import permutations -from utils import timeit - - -@timeit("Problem 43") -def compute(): - """ - The number, 1406357289, is a 0 to 9 pandigital number because - it is made up of each of the digits 0 to 9 in some order, but - it also has a rather interesting sub-string divisibility property. - - Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this - way, we note the following: - - d2d3d4=406 is divisible by 2 - d3d4d5=063 is divisible by 3 - d4d5d6=635 is divisible by 5 - d5d6d7=357 is divisible by 7 - d6d7d8=572 is divisible by 11 - d7d8d9=728 is divisible by 13 - d8d9d10=289 is divisible by 17 - - Find the sum of all 0 to 9 pandigital numbers with this property. - """ - ans = [] - pandigital = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] - - for n in permutations(pandigital): - n_ = "".join(n) - if n_[0] != "0" and sorted("".join(n_)) == pandigital: - if int(n_[7:]) % 17 == 0: - if int(n_[6:9]) % 13 == 0: - if int(n_[5:8]) % 11 == 0: - if int(n_[4:7]) % 7 == 0: - if int(n_[3:6]) % 5 == 0: - if int(n_[2:5]) % 3 == 0: - if int(n_[1:4]) % 2 == 0: - ans.append(int(n_)) - - return sum(ans) - -if __name__ == "__main__": - - print(f"Result for Problem 43: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem044.py b/src/Python/Problem044.py deleted file mode 100644 index 5b2b1be..0000000 --- a/src/Python/Problem044.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 30 Aug 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 44 of Project Euler -https://projecteuler.net/problem=44 -""" - -from itertools import combinations -from operator import add, sub -from utils import timeit - -def pentagonal(n): - return int(n*(3*n-1)/2) - -@timeit("Problem 44") -def compute(): - """ - Pentagonal numbers are generated by the formula, Pn=n(3n−1)/2. - The first ten pentagonal numbers are: - - 1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ... - - It can be seen that P4 + P7 = 22 + 70 = 92 = P8. However, their - difference, 70 − 22 = 48, is not pentagonal. - - Find the pair of pentagonal numbers, Pj and Pk, for which their - sum and difference are pentagonal and D = |Pk − Pj| is minimised. - - What is the value of D? - """ - dif = 0 - pentagonal_list = set(pentagonal(n) for n in range(1,2500)) - pairs = combinations(pentagonal_list, 2) - for p in pairs: - if add(*p) in pentagonal_list and abs(sub(*p)) in pentagonal_list: - dif = (abs(sub(*p))) - # the first one found would be the smallest - break - - return dif - -if __name__ == "__main__": - - print(f"Result for Problem 44: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem045.py b/src/Python/Problem045.py deleted file mode 100644 index 4af0840..0000000 --- a/src/Python/Problem045.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 09 Sep 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 45 of Project Euler -https://projecteuler.net/problem=45 -""" - -from utils import timeit - -def pentagonal(n): - return int(n*(3*n-1)/2) - -def hexagonal(n): - return int(n*(2*n-1)) - -@timeit("Problem 45") -def compute(): - """ - Triangle, pentagonal, and hexagonal numbers are generated by the following formulae: - Triangle Tn=n(n+1)/2 1, 3, 6, 10, 15, ... - Pentagonal Pn=n(3n−1)/2 1, 5, 12, 22, 35, ... - Hexagonal Hn=n(2n−1) 1, 6, 15, 28, 45, ... - - It can be verified that T285 = P165 = H143 = 40755. - - Find the next triangle number that is also pentagonal and hexagonal. - """ - pentagonal_list = set(pentagonal(n) for n in range(2,100_000)) - # all hexagonal numbers are also triangle numbers! - hexagonal_list = set(hexagonal(n) for n in range(2,100_000)) - - ans = sorted(hexagonal_list & pentagonal_list) - # First one is already known - return ans[1] - -if __name__ == "__main__": - - print(f"Result for Problem 45: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem046.py b/src/Python/Problem046.py deleted file mode 100644 index 2b2d479..0000000 --- a/src/Python/Problem046.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 12 Sep 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 46 of Project Euler -https://projecteuler.net/problem=46 -""" - -from utils import timeit, is_prime - -def is_goldbach(number): - for i in range(number - 1, 1, -1): - if is_prime(i) and ((number - i) / 2)**0.5 % 1 == 0: - return True - return False - -@timeit("Problem 46") -def compute(): - """ - It was proposed by Christian Goldbach that every odd composite number - can be written as the sum of a prime and twice a square. - - 9 = 7 + 2×1^2 - 15 = 7 + 2×2^2 - 21 = 3 + 2×3^2 - 25 = 7 + 2×3^2 - 27 = 19 + 2×2^2 - 33 = 31 + 2×1^2 - - It turns out that the conjecture was false. - - What is the smallest odd composite that cannot be written as the sum - of a prime and twice a square? - """ - ans = 9 - while True: - ans += 2 - if not is_prime(ans) and not is_goldbach(ans): - return ans - - - -if __name__ == "__main__": - - print(f"Result for Problem 46: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem047.py b/src/Python/Problem047.py deleted file mode 100644 index 342abdb..0000000 --- a/src/Python/Problem047.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 12 Sep 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 47 of Project Euler -https://projecteuler.net/problem=47 -""" - -from utils import timeit - -def factor(n): - ans = [] - d = 2 - while d * d <= n: - if n % d == 0: - ans.append(d) - n //= d - else: - d += 1 - if n > 1: - ans.append(n) - return ans - -@timeit("Problem 47") -def compute(): - """ - The first two consecutive numbers to have two distinct prime factors are: - - 14 = 2 × 7 - 15 = 3 × 5 - - The first three consecutive numbers to have three distinct prime factors are: - - 644 = 2² × 7 × 23 - 645 = 3 × 5 × 43 - 646 = 2 × 17 × 19. - - Find the first four consecutive integers to have four distinct prime factors each. - What is the first of these numbers? - """ - ans = [] - - for number in range(1, 1_000_000): - if len(ans) == 4: - break - elif len(set(factor(number))) == 4: - ans.append(number) - else: - ans = [] - - return ans[0] - - - -if __name__ == "__main__": - - print(f"Result for Problem 47: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem048.py b/src/Python/Problem048.py deleted file mode 100644 index 19ca3d2..0000000 --- a/src/Python/Problem048.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 12 Sep 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 48 of Project Euler -https://projecteuler.net/problem=48 -""" - -from utils import timeit - - -@timeit("Problem 48") -def compute(): - """ - 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. - """ - series = sum(i**i for i in range(1,1001)) - return str(series)[-10:] - - -if __name__ == "__main__": - - print(f"Result for Problem 48: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem049.py b/src/Python/Problem049.py deleted file mode 100644 index bb89cfe..0000000 --- a/src/Python/Problem049.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 18 Sep 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 49 of Project Euler -https://projecteuler.net/problem=49 -""" - -from utils import timeit, list_primes - - -@timeit("Problem 49") -def compute(): - """ - The arithmetic sequence, 1487, 4817, 8147, in which each of the terms - increases by 3330, is unusual in two ways: - (i) each of the three terms are prime, and, - (ii) each of the 4-digit numbers are permutations of one another. - - There are no arithmetic sequences made up of three 1-, 2-, or 3-digit primes, - exhibiting this property, but there is one other 4-digit increasing sequence. - - What 12-digit number do you form by concatenating the three terms in this sequence? - """ - ans = [] - primes_list = sorted(set(list_primes(10_000)) - set(list_primes(1_000))) - - for number in primes_list: - if set(list(str(number))) == set(list(str(number+3330))) == set(list(str(number+6660))): - if number+3330 in primes_list and number+6660 in primes_list: - ans.append(str(number)+str(number+3300)+str(number+6660)) - # return the second one - return ans[1] - - -if __name__ == "__main__": - - print(f"Result for Problem 49: {compute()}") \ No newline at end of file diff --git a/src/Python/Problem050.py b/src/Python/Problem050.py deleted file mode 100644 index e10e15e..0000000 --- a/src/Python/Problem050.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 -""" -Created on 18 Sep 2021 - -@author: David Doblas Jiménez -@email: daviddoji@pm.me - -Solution for problem 50 of Project Euler -https://projecteuler.net/problem=50 -""" - -from utils import timeit, list_primes, is_prime - - -@timeit("Problem 50") -def compute(): - """ - The prime 41, can be written as the sum of six consecutive primes: - - 41 = 2 + 3 + 5 + 7 + 11 + 13 - - This is the longest sum of consecutive primes that adds to a prime below one-hundred. - - The longest sum of consecutive primes below one-thousand that adds to a prime, - contains 21 terms, and is equal to 953. - - Which prime, below one-million, can be written as the sum of the most consecutive primes? - """ - - ans = 0 - result = 0 - prime_list = list_primes(1_000_000) - - for i in range(len(prime_list)): - sum = 0 - count = 0 - for j in prime_list[i:]: - sum += j - count += 1 - if is_prime(sum) and count > result: - result = count - ans = sum - # print(sum, result) - if sum > 1_000_000: - break - return ans - - -if __name__ == "__main__": - - print(f"Result for Problem 50: {compute()}") \ No newline at end of file