Факторизация на HomeLisp
Формулировка задачи:
(defun p (n) (setq i 2);;объявление переменной (do ( ;; задание нач. значений и форм приращений, пусто ) ( (<= i (sqr n));;условие остановки цикла ) (if (= 0 (remainder(%) n i)) ;; Истино - если не Nil (= n n/i)(printline n) (prints "* ") ;; если да, то выводим n (+ i 1) ;; если нет, то плюсуем и заново ) ) )
// factorialization.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <math.h> #include <conio.h> int _tmain(int argc, _TCHAR* argv[]) { double n, i; scanf_s("%lf", &n); i = 2; while (i <= (sqrt(n))) if ((int)n % (int)i == 0) { printf_s("%.0lf*", i); n = n / i; } else i = i + 1; printf_s("%.0lf", n); _getch(); return 0; }
(defun p (n) (setq i 2) (loop (if(<= i (sqr n)) (if (zerop(remainder n i)) ((= n n/i)(print n)(prints "* ")) (add1 i)) (return 'ok)) ) )
Решение задачи: «Факторизация на HomeLisp»
(defun factorize (n) (let ((res nil)) (do ((i 2 (+ i 1))) ((> i (/ n 2)) (reverse res)) (when (zerop (% n i)) (push i res))))) ==> factorize (factorize 10) ==> (2 5)
Объяснение кода листинга программы
В данном коде представлена функция factorize, которая принимает целочисленный аргумент n и возвращает список простых чисел, которые являются делителями n. Внутри функции используется блок let, который определяет две переменные: res и i. Переменная res инициализируется значением nil, а переменная i инициализируется значением 2. Далее следует цикл do, который выполняется до тех пор, пока значение переменной i не станет больше n/2. В каждой итерации цикла значение переменной i увеличивается на 1. Внутри цикла do находится условие when, которое проверяет, является ли n/i равным нулю. Если это так, то число i добавляется в конец списка res с помощью функции push. После завершения цикла do, результат функции factorize возвращается в обратном порядке с помощью функции reverse. Таким образом, при вызове функции factorize с аргументом 10, она вернет список простых чисел (2 5).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д