diff --git a/src/Python/Problem058.py b/src/Python/Problem058.py new file mode 100644 index 0000000..3358dc6 --- /dev/null +++ b/src/Python/Problem058.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 +""" +Created on 10 Oct 2021 + +@author: David Doblas Jiménez +@email: daviddoji@pm.me + +Solution for problem 58 of Project Euler +https://projecteuler.net/problem=58 +""" + +from utils import timeit, is_prime + + +@timeit("Problem 58") +def compute(): + """ + Starting with 1 and spiralling anticlockwise in the following way, + a square spiral with side length 7 is formed. + + 37 36 35 34 33 32 31 + 38 17 16 15 14 13 30 + 39 18 5 4 3 12 29 + 40 19 6 1 2 11 28 + 41 20 7 8 9 10 27 + 42 21 22 23 24 25 26 + 43 44 45 46 47 48 49 + + It is interesting to note that the odd squares lie along the bottom right + diagonal, but what is more interesting is that 8 out of the 13 numbers + lying along both diagonals are prime; that is, a ratio of 8/13 ≈ 62%. + + If one complete new layer is wrapped around the spiral above, a square + spiral with side length 9 will be formed. If this process is continued, + what is the side length of the square spiral for which the ratio of primes + along both diagonals first falls below 10%? + """ + + ratio = 1 + corners = [] + side = 0 + num = 1 + + while ratio > 0.1: + side += 2 + for _ in range(4): + num += side + corners.append(is_prime(num)) + ratio = sum(corners) / len(corners) + + return side + 1 + + +if __name__ == "__main__": + + print(f"Result for Problem 58: {compute()}") \ No newline at end of file