Найти и напечатать в порядке убывания все простые числа из диапазона от 2 до 201 - Lisp

Узнай цену своей работы

Формулировка задачи:

найти и напечатать в порядке убывания все простые числа из диапазона от 2 до 201

Решение задачи: «Найти и напечатать в порядке убывания все простые числа из диапазона от 2 до 201»

textual
Листинг программы
  1. ;; racket-lang.org
  2. (define prime-closure
  3.   (let ((primes '(2))
  4.         (current-prime 3))
  5.     (lambda (#:reset (reset #f))
  6.       (when reset
  7.         (set! primes '(2))
  8.         (set! current-prime 3))
  9.       (unless (ormap (lambda (x) (= (remainder current-prime x) 0)) primes)
  10.         (set! primes (cons current-prime primes)))
  11.       (set! current-prime (+ 2 current-prime))
  12.       primes)))
  13.  
  14.  
  15. (define (foo n #:reset (reset #f))
  16.   (let ((primes (prime-closure #:reset reset)))
  17.     (if (> (first primes) n)
  18.         (rest primes)
  19.         (foo n))))
  20.  
  21.  
  22. (define main
  23.   (case-lambda
  24.     (() (foo 21 #:reset #t))
  25.     ((n) (foo n #:reset #t))
  26.     (n n)))
  27.  
  28. (main)
  29. (main 30)
  30. ;'(19 17 13 11 7 5 3 2)
  31. ;'(29 23 19 17 13 11 7 5 3 2)

Объяснение кода листинга программы

В данном коде написан алгоритм поиска простых чисел в заданном диапазоне. Он использует идею перебора чисел и проверки их на простоту с помощью решета Эратосфена.

  1. prime-closure - это функция-закрытая, которая генерирует список простых чисел от 2 до 201. Она использует let для создания локальной области видимости, в которой определяются две переменные: primes - список простых чисел, и current-prime - текущее число, которое проверяется на простоту. Внутри lambda происходит проверка, и если число простое, оно добавляется в список primes. После этого, current-prime увеличивается на 2, чтобы перейти к следующему числу.
  2. foo - это вспомогательная функция, которая принимает число n и флаг reset. Если reset установлен в #t, то список простых чисел сбрасывается до начального состояния (только число 2). Затем функция вызывает prime-closure для получения списка простых чисел и проверяет, больше ли первый элемент списка n. Если да, то возвращается остаток списка, иначе вызывается рекурсивно foo с n и reset установленным в #t, чтобы продолжить поиск простых чисел.
  3. main - это функция-точка входа, которая использует case-lambda для определения, что делать в зависимости от количества аргументов. Если нет аргументов, то вызывается foo с n = 21 и reset = #t. Если есть один аргумент, то вызывается foo с этим аргументом и reset = #t. Если есть два аргумента, то вызывается foo с n = n и reset = #t.
  4. Вызывая main без аргументов, мы получаем список простых чисел от 2 до 201, который выводится в консоль.
  5. Вызывая main с аргументом 30, мы вызываем foo с n = 30 и reset = #t. Поскольку primes содержит только числа от 2 до 31 (включая 2 и 31), мы получаем список простых чисел от 2 до 31, который также выводится в консоль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы