0
isPrime::Integer->Bool
isPrime n=not (hasfactor n 2(div n 2))
hasfactor::Integer->Integer->Integer->Bool
hasfactor n low high
|low>high=False
|mod n low==0=True
|otherwise = hasfactor n (low+1) high
我了解大部分代码,第二行not (hasfactor n 2(div n 2))
除外。为什么上限为(div n 2)
? 说如果我们test 8
,那么(hasfactor n 2(div n 2))
是hasfactor 8 2 4
,我在这里看不到划分8
这一点。测试整数是否为素数
这不是最好的方法来检查只有平方根,因为它必须通过循环'2..n'并反复立即丢弃'sqrt n..n'中的每个数字。抛弃所有这些数字需要很长时间。问题中的代码只处理这个数字的一半。 –
是的,右侧添加了更好的过滤版本。 – karakfa