Haskell的新手。我有以下代码解决此问题的Haskell方法是什么?
fac :: Integer -> [Integer]
fac x = take 1 $ map (x `mod`) $ reverse [2 .. xs]
where xs = floor $ sqrt $ fromIntegral x
我想显示从[2 .. xs]
使得x mod y == 0
第一个值。但是我不能使用filter
,因为只能从mod
输出。我该怎么做呢?如果你想在这里reverse
,或究竟是你的目标
fac x = take 1 $ filter ((== 0).(x `mod`)) $ reverse [2 .. xs]
where xs = floor $ sqrt $ fromIntegral x
不确定:
我不太清楚你的意思是通过相互递归。我得到isPrime会驱动primeList。但为什么primeList反馈到isPrime? – Chris
如果某些'm'除以'n','n'不是素数。但是,如果'm'除了'n',那么'm'的任何除数也会将'n'分开。所以,为了确定'n'是否是素数,你只需要知道它是否可以被某个素数整除。原来你只需要用小于或等于'sqrt(n)'的素数对它进行修改(如果你以前没有见过这个,试着向自己证明这个结果是真的)。如果任何余数等于零,那么'n'不是素数。 – Emil
另外,我说'primeList'应该是上面答案中的一个函数,但事实并非如此。 'primeList'只是一个列表,你可能已经想通了。 – Emil