I'm working on problem 46 from project euler:
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?
My code is so ridiculously inefficient and it takes minutes before an answer pops up. (Boundary numbers are just rough estimates)
numbers = [(2*x**2) for x in list(range(1, 1000))] normal = list(range(1, 10000000)) #produces primes under n def primes(n): sieve = [True] * n for i in range(3, int(n**0.5) + 1, 2): if sieve[i]: sieve[i * i:: 2 * i] = [False] * int((n - i * i - 1)/(2 * i) + 1) return  + [i for i in range(3, n, 2) if sieve[i]] primes = primes(1000) final =  #add the two lists in every way possible added = [x + y for x in numbers for y in primes] #if it does not appear in a normal number line send it to final for x in added: if x not in normal: final.append(x) print(min(final))
I also lack the knowledge to use any mathematical tricks or algorithms. Where can I start learning code efficiency/performance and simple algorithms to use in my code?