Project Euler

Problem #46

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?

Ruby: Running time = 0.93s
+#PrimeList

def isSquare?(n)
  return false if n<1
  a=Math.sqrt(n).to_i
  n==a*a
end

def p46
  i=7
  while true
    i+=2
    i+=2 while PrimeList.isPrime? i
    pl=PrimeList.new
    pl.getNext
    fits=false
    while (p=pl.getNext) < i
      if(isSquare?((i-p)/2))
	fits=true
	break
      end
    end
    unless fits
      puts i
      return
    end
  end
end