我正在尝试编写一个带数字的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
您能帮我吗?
答案 0 :(得分:2)
您需要创建圆形旋转,以便更轻松地使用列表而不是数字
rotate [] = []
rotate (x:xs) = xs ++ [x]
好吧,您需要尽可能多的数字(尽管有些数字可能不是唯一的)
rotations n = take (length n) $ iterate rotate n
可以避免使用length
,但在此域应该没问题
现在您需要使用read/show
map (read :: String->Integer) $ rotations $ show 123
[123,231,312]
剩下的就是为每个元素调用prime