2013-11-14 3 views
0

В ракетке, как я могу создать процедуру, используя filter и gcd, который делает следующее:Относительно простые числа из списка

(list-of-numbers) number = > (list)

Если полученный список включает в себя номера из списка, которые являются относительно простой с единственной?

EDIT: До сих пор я придумал следующий код:

(define (coprime? list-of-num n) 
(cond 
    [(empty? list-of-num) empty] 
    [else 
    (filter (lambda (num) 
      (= (gcd (first list-of-num) n) 1)) num))])) 

Но я полностью потерял и понимаю, что это своего рода беспорядок. Моя общая идея состоит в том, чтобы создать логическую функцию, возвращающую #t, когда (gcd number-from-list number) равна единице, а затем процедура фильтрует каждое число из списка, что приводит к #t.

+0

Вы называете 'filter', передавая ей массив и функцию, которая вызывает' gcd'. – Barmar

+0

@ ÓscarLópez, см. Мое редактирование. –

ответ

1

Просто используйте определение relative primes, и решение естественно вытекает:

(define (relative-primes lst num) 
    (filter (lambda (e) 
      <???>) ; see definition of relative primes 
      lst)) 
+0

Я действительно не понимаю, что вы имеете в виду, но, пожалуйста, см. Мое редактирование, если оно дает вам более полное представление о том, чего я пытаюсь достичь. Спасибо. –

+0

@ user2969733 что именно вы не понимаете? мой ответ выше - правильное решение, код в вопросе более сложный, чем он должен быть (вам не нужно использовать 'cond' здесь!). Единственной частью, которую я оставил в качестве упражнения, является определение того, является ли текущий элемент 'e' совпадающим с параметром' num'. Просто замените '' на правильный код –

+2

Благодарим вас за разъяснение, я понял это с вашей помощью. Я заменил на '(= 1 (gcd num e))'. Видимо, у меня есть склонность к излишней избыточности. Спасибо, что предложили это решение! –

Смежные вопросы