【问题标题】:Create stream of numbers that only have certain prime factors创建只有某些素因子的数字流
【发布时间】:2014-11-30 23:49:13
【问题描述】:

我想获取数字 1、2、3、4 ... 的无限流并对其进行过滤,以便只有具有 7 和 13 的质因数的数字在其中。 (即 7、13、49、91、169、343、...)

我启动了以下功能,但我对如何正确过滤仅具有这些特定素数的数字感到困惑。

(define function
    (stream-filter
        (lambda (x)
            (or
                (= (/ x 7) 1)
                (= (/ x 13) 1)
                )
            )
        numbers
        )
    )

其中流过滤器与 SICP 中的功能相同。

【问题讨论】:

  • 我是否遗漏了什么,或者您可以对数字进行模 7 或模 13 吗?

标签: filter stream scheme


【解决方案1】:

这里有一个思路:找到数的质因数,检查是否有除713以外的因数:

(define (factor number)
  (let loop ((divisor 2) (number number))
    (cond ((> (* divisor divisor) number) (list number))
          ((zero? (modulo number divisor))
           (cons divisor (loop divisor (/ number divisor))))
          (else (loop (add1 divisor) number)))))

(stream-filter
 (lambda (x)
   (null? 
    (filter (lambda (e) (not (or (= e 7) (= e 13))))
            (factor x))))
 numbers)

【讨论】:

    猜你喜欢
    • 2019-01-27
    • 2020-11-19
    • 1970-01-01
    • 2017-05-14
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多