project euler problem 27
なんどやってもおかしいと思ったのは n^2+a*n+bの値がマイナスになっていてもisPrimeがTrueを出すときがあったせいだ。
import Data.Numbers.Primes import Data.Ord import Data.List main=print $ uncurry (*) $ maximumBy (comparing (length.plist)) ab m=1000 ab = [(a,b)|a<-[(-m)..m],b<- takeWhile (<m) primes ] plist (a,b) = takeWhile ck [0..] where f n = n*n+a*n+b ck n | f n < 0 = False -- isPrimeがマイナスを素数として判定するため | otherwise = isPrime $ f n
素数列を生み出すライブラリのおかげで6秒で計算できた。