为了展示如何用Lucas序列检查素数,让我们来看看 一个例子。考虑卢卡斯序列中的前几个数字: 1,3,4,7,11,18,29,47,76,123,...
如果我们有兴趣看一个特定的数字,比如7,是否为素数, 我们取Lucas序列中的第7个数并减去1.第7个 卢卡斯数是29.减1,我们有28.现在,如果这个结果是 被7整除的可能是素数。在我们的例子中,28是 可以被7整除,所以可能是素数。我们将这些数字称为 Lucas 伪素
如果我们对另一个号码感兴趣,比如8,我们会选择第8个 卢卡斯数和减1.在这种情况下,我们得到46,而不是 可以被8整除。因此,8 绝对不是素数。这个方法是 用于过滤复合数字。
因此,确定整数 p 是否可能的一般过程 素数如下:
- 找到 p 卢卡斯数
- 减1
- 检查 p 是否均匀划分结果
醇>定义一个名为
(lucas-pseudoprime p)
的SCHEME函数 这种确定整数 p 是否为Lucas伪伪的方法。
到目前为止,我有这个:
(define (lucas-pseudoprime p)
(define (helper-lucas goal current next)
(if (= goal current)
(head next)
(helper-lucas goal (+ current 1) next))
(let ((solution (- p 1))
(if (= (module solution p) 0) #t
#f)))))
不确定这是怎么回事。