Problem 27
コンテンツ
Euler published the remarkable quadratic formula:
n² + n + 41
It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39. However, when n = 40, 402 + 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² 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² + 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.
特に何も考えずに、実装。愚直、素直、ナイーブな解法とも。
import Data.List import Data.Ord sieve (_,((p:ps),qs)) = (ps',(ps++ps',filter ((/=).(`mod` p)) qs')) where (ps',qs') = span (<p*p) qs primes = iterate sieve([2,3],([3],[3,5..]))>>=fst isPrime = isP primes where isP (p:ps) n | p==n = True | p>n = False | otherwise = isP ps n quadSeq a b= map (n-> n*n+a*n+b) [,1..] p027 =print.fst.maximumBy(comparing snd)$ [(a*b,length.takeWhile isPrime.take b$quadSeq a b) |a<-[-999..999],b<-takeWhile(<1000)primes,isPrime $a+b+1]
作成者 Toru Mano
最終更新時刻 2023-01-01 (c70d5a1)