我想获取无数的数字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的功能相同。
答案 0 :(得分:1)
以下是一个想法:查找数字的主要因素并检查是否存在7
和13
以外的其他因素:
(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)