我正在使用Haskell处理Facebook Hackercup 2015问题并且遇到了这个问题.
输入:以整数T开头,问题数量.对于每个问题,有一行包含3个以空格分隔的整数:A,B和K.
输出:对于第i个问题,打印包含"Case #i:"的行,后跟包含范围[A,B]中的优先级为K的整数数.
数字X的优先级是其主要因素的数量.例如,12的优先级是2(因为它可以被素数2和3整除),550的优先级是3(因为它可以被素数2,5和11整除),7的优先级是1(作为只有素数可以被7整除.
1≤T≤1002≤A≤B≤10^ 71≤K≤10^ 9
这是我的Haskell解决方案:
import System.IO
import Data.List
import Control.Monad
incEvery :: Int -> [(Int -> Int)]
incEvery n = (cycle ((replicate (n-1) id) ++ [(+ 1)]))
primes2 :: [Int]
primes2 = sieve 2 (replicate (10^7) 0)
where
sieve _ [] = []
sieve n (a:xs) = (a + (if a == 0 then 1 else 0))
: if a == 0 then
sieve (n+1) (zipWith ($) (incEvery n) xs)
else …Run Code Online (Sandbox Code Playgroud)