# -*- coding: utf-8 -*- # http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2027 # # c = n ** 2 + a * n + b # として,n = 0 のとき # 0 + 0 + b # であることから b は素数である. # また n = 1 のとき # 1 + a + b # となり,b が 2より大きい素数のとき b は奇数であることから a は奇数である. # また a が負の数のとき c が正の数になる条件は # b > |a| # である. # require 'prime' # b の候補として1000までの素数を生成 puts Prime.each(1000-1).reduce([-1,-1]) {|max, b| # a の候補として -b .. 1000の奇数を生成 [(-b).step(1000-1, 2).map {|a| # 連続する素数を数える n = 0 begin c = n ** 2 + a * n + b n = n.next end while (c.prime?) [n - 1, a * b] }.max, max].max # 結果の最大値 }.pop