Project Euler Problem 27
問題
Euler published the remarkable quadratic formula: n^2 + n + 41 It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39. However, when n = 40, 40^2 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 41² + 41 + 41 is clearly divisible by 41. Using computers, the incredible formula n^2 − 79n + 1601 was discovered, which produces 80 primes for the consecutive values n = 0 to 79. The product of the coefficients, −79 and 1601, is −126479. Considering quadratics of the form: n^2 + an + b, where |a| < 1000 and |b| < 1000 where |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.
ソース
max = 100000 @prime = Array.new(max, 1) @prime[0..1] = [0, 0] i = 2 while i < Math.sqrt(max).to_i + 1 do (i + i).step(max, i){|x| @prime[x] = 0} i += @prime[(i + 1)..max].index(1) + 1 end def count_prime(a, b) n = 0 while true x = n * n + a * n + b break if x < 0 || @prime[n * n + a * n + b].zero? n += 1 end n end ans = 0 max = 0 -999.upto(999) do |a| -999.upto(999) do |b| n = count_prime(a, b) ans, max = a * b, n if max < n end end puts ans
解答
-59231
感想
んま全探索で終わったので良かった。。
こういう問題の場合、素数をどこまで用意するかが不明なんよな(汗