0

为了展示如何用卢卡斯序列检查素数,让我们看一个例子。考虑卢卡斯序列中的前几个数字:1,3,4,7,11,18,29,47,76,123,...

如果我们想知道一个特定的数字,比如 7,是否是素数,我们将卢卡斯数列中的第 7 个数字减去 1。第 7 个卢卡斯数是 29。减去 1,我们得到 28。现在,如果这个结果是能被 7 整除,7 可能是素数。在我们的示例中,28 可以被 7 整除,因此它可能是素数。我们称这些数为Lucas 伪素数。

如果我们对另一个数字感兴趣,比如 8,我们将取第 8 个卢卡斯数并减去 1。在这种情况下,我们得到 46,它不能被 8 整除。所以,8绝对不是素数。此方法对于过滤出合数很有用。

因此,确定整数p是否可能是素数的一般过程如下:

  1. 找到第p个卢卡斯数
  2. 减 1
  3. 检查p是否将结果均分

定义一个 SCHEME 函数,命名(lucas-pseudoprime p)它使用这种方法来确定整数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)))))

不知道这有什么问题。

4

0 回答 0