scheme - 显示所有具有最大公约数的元素对1
问题描述:
我开始使用algortihm进行组合,但是当m在递归中变为0时,第一个y将是'(()),所以程序将显示只有()会重复4 *列表时间的大小。scheme - 显示所有具有最大公约数的元素对1
(define (pairs-GCD L)
(define (comb m lst)
(cond ((= m 0) '(()))
((null? lst) '())
(else (append (map (lambda (y) (cond (equal? (GCD(car lst) y) 1) (cons (car lst) y))) (comb (- m 1) (cdr lst))) (comb m (cdr lst))))))
(comb 2 L)
) 编辑:校正后的输出 输入: '(2 5 3 6 11 15) 输出:'((2 5)(2 3)(2 11)(2 15)(5 3) (5 6)(5 11)(6 11)(3 11)(6 11)(11 15))
答
如果我们使用Racket的内置程序 - 我们可以轻松生成所有2-元素组合,针对给定条件测试它们并输出具有正确对的列表:
(define (pairs-gcd lst)
(for/list ([pair (in-combinations lst 2)]
#:when (= (apply gcd pair) 1))
pair))
例如:
(pairs-gcd '(2 5 3 6 11 15))
=> '((2 5) (2 3) (5 3) (5 6) (2 11) (5 11) (3 11) (6 11) (2 15) (11 15))
你能提供一个带有预期输出的示例输入吗? –
刚刚添加了一些输入和预期的输出 – zaig
嗯,这不是'lcm',看起来更像'gcd'。另外,为什么'(2 15)'和'(11 15)'不包含在输出中? –