Clojure:确定参数是否为素数

Clojure:确定参数是否为素数,clojure,Clojure,几天前我开始学习Clojure,并编写了一个简单的函数来决定它的给定参数是否为素数。 这是我的密码: (defn is-prime [n] (nil? (some #(= (mod n %) 0) (range 2 (java.lang.Math/sqrt n))))) 我的问题是,当用“4”调用此函数时,它返回true (素数为4)=>真 我为调试目的编写了另一个函数,它列出了所有小于250的素数: (defn primes [] (fi

几天前我开始学习Clojure,并编写了一个简单的函数来决定它的给定参数是否为素数。 这是我的密码:

(defn is-prime [n] 
    (nil? 
        (some #(= (mod n %) 0) 
            (range 2 (java.lang.Math/sqrt n)))))
我的问题是,当用“4”调用此函数时,它返回true

(素数为4)=>真

我为调试目的编写了另一个函数,它列出了所有小于250的素数:

(defn primes [] (filter #(is-prime %) (range 1 250)))
我在维基百科页面上查找了素数列表,发现除了数字“4”之外,其余的输出都是正确的

(素数) =>(12345791113131313131919253313741434749535961677173798997101103107109113121127131139149151157 167169173179181191193197199211223227 229233239241)

我一直在考虑,也许这只是我的一些初学者的错误,但我无法找到解决办法。我非常感谢您的帮助,提前谢谢。

(范围m n)
不包括n。所以
(范围2(sqrt 4)
=
(范围2 2)
=
()
;它不尝试任何除数。注意,你的“素数”列表中也有9:
(范围2(sqrt 9))
=
(范围2 3)
=
(2)
所以它从不尝试除以3。25、49、121、169的问题相同;基本上适用于所有素数的平方


最简单的修复方法是
(范围2(inc(sqrt n))

我没有注意到其余的平方数,非常感谢您的解决方案!