现在有效的素数检验算法基本都基于概率性的检测,
虽然2002诞生了AKS算法,但是在实际应用中,依然依赖概率性检测算法。
Solovay, Strassen于1974年最早提出了概率性的素数检验方法,我们现在称为Solovay-Strassen检测


代码:(其中expmod是幂取模(见rabin-miller的代码),jacobi是jacobi符号计算函数)
(defun solovay-strassen-once (n)
(let ((a (+ 1 (random n))))
(if (= a n) (setf a (- a 1)))
(if (and (= 1 (gcd a n))
(or (= (jacobi a n) (expmod a (/ (- n 1) 2) n))
(= (jacobi a n) (- (expmod a (/ (- n 1) 2) n) n))))
t
nil)))
(defun ss (n)
(let ((f t))
(if (= 2 n) t
(if (evenp n)
nil
(progn (dotimes (i 10) ;;;测试10次
(if (not (solovay-strassen-once n))
(progn (setf f nil) (return))))
f)))))
本文介绍了Solovay-Strassen素数检验算法,这是一种基于概率性的检测方法,广泛用于实际应用中。文章提供了一段Lisp代码实现,通过测试多次并结合jacobi符号计算来判断一个数是否为素数。
4046

被折叠的 条评论
为什么被折叠?



