创建仅具有某些素因子的数字流

时间:2014-11-30 23:49:13

标签: filter stream scheme

我想获取无数的数字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
        )
    )

其中stream-filter与SICP的功能相同。

1 个答案:

答案 0 :(得分: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)