Haskell中的循环素数

时间:2018-10-02 18:41:41

标签: haskell

我正在尝试编写一个带数字的haskell代码,并确定它是否为循环质数。圆形素数是素数,即使它以不同的顺序排列也为素数。我已经编写了以下代码:

编辑:

220

应用过滤器功能后,代码应打印以下内容:

prime :: Integer -> Bool
prime a
   |factor a == [1] = True
   |factor a == [a] = True
   |otherwise         = False

factor :: Integer -> [Integer]
factor a = [x | x <- [1..a], mod a x == 0]

但是它仅打印> filter circprime [2..100] [2,3,5,7,11,13,17,31,37,71,73,79,97] ,并且:

False

您能帮我吗?

1 个答案:

答案 0 :(得分:2)

您需要创建圆形旋转,以便更轻松地使用列表而不是数字

rotate [] = []
rotate (x:xs) = xs ++ [x]

好吧,您需要尽可能多的数字(尽管有些数字可能不是唯一的)

rotations n = take (length n) $ iterate rotate n

可以避免使用length,但在此域应该没问题

现在您需要使用read/show

将整数转换为list并返回。
map (read :: String->Integer) $ rotations $ show 123
[123,231,312]

剩下的就是为每个元素调用prime