Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.193.7] |
|
Сообщ.
#1
,
|
|
|
Привет ребята возник вопрос по лиспу.(Xlisp)
Не могу не в какую решить эту задачу. Пишут не зачет. уже устал ее переделовать. 3) Напишите функцию, которая определяет являеться ли данное натурально число простым. Воспользуйтесь более общей задачей: (ispr n m) - Число n не делиться на на одно число большее или равное m и меньшее n'. Имеем (ispr n m)-истино, во-первых, если n=m, во-вторых, если истино(ispr n m+1) и n не делится на m. |
Сообщ.
#2
,
|
|
|
Цитата а вы сами то что написали? покажите, глядишь и поправим ;-) Простое число - это число, которое делится только на себя (без остатка). Например, 1,2,3,5,7,11,13,17,19,23,29,31,37,… и так до бесконечности. . . . Первый способ. Цитата defun ispr (n m) (let((r(rem n m))) (if(zerop r) m (gcd m r)))) Второй способ. Цитата (defun ispr n m) (if (null n)m) (insert(first n) (merge(reset n) m)))) ---------- (defun ispr (n m) (cond ((null m) (list n)) ((< a (first m)) (cons n m)) (t(cons(first m)(insert n (reset m))))) Что сдесь не правильно присылаю мне не зачет. Ребята кто знает помогите решить. |
Сообщ.
#3
,
|
|
|
http://www.netlib.org/bibnet/tools/emacs/primes-1.00/primes.el
С комментариями Добавлено (Define (Primes N) (RemoveComposite(ListNumbers 1 N))) (define (ListNumbers I J) (if (> I J) NIL (if (= I J) (list I) (cons I (ListNumbers (+ 1 I) J)) )) ) (define (RemoveComposite L) (if (NULL L) NIL (if (composite (car L)) (RemoveComposite (cdr L)) (cons (car L) (RemoveComposite (cdr L))) )) ) (define (composite n) (hasdivisor 2 N) ) (define (hasdivisor I N) (if (> (* I I) N) NIL (if (divides I N) T (hasdivisor (+ 1 I) N) )) ) (define (divides I N) (= (* I (/ N I)) N)) Взято с http://www.csci.csusb.edu/dick/cs320/lab/primes.html Капец полный. Неужели пользоваться Google так трудно? |
Сообщ.
#4
,
|
|
|
Ho Im, спасибо.
|
Сообщ.
#5
,
|
|
|
Ho Im, Задача не правильно решена..
|
Сообщ.
#6
,
|
|
|
Если задача еще актуальна могу преедложить свой вариант:
(defun ispr(n) (solve n 2 (/ n 2)) ) (defun solve(n m limit) (cond ((<= limit m) T) ((= (mod n m) 0) nil) (t (solve n (1+ m) limit)) ) ) (defun mod (u v) (- u (* (/ u v) v)) ) (print (ispr 12)) Я так понимаю, это ты задание такое получил от препода. Думаю рекурсией пойдет, преподы по лиспу это дело любят, но тока для небольших чисел. Скажем для 145145143, (если оно простое) уже будет переполнение. Не понимаю чего ты там мудрил вверху, все просто. Можешь реализовать в цикле, я в лиспе таким не пользуюсь (просто не смотрел, как это делается, пользуюсь тем, чему научили). 1. Цикл m = от 2 до n/2 2. Если n mod m = 0 выходим из функции (это не простое число!!!) 3. Если мы благополучно миновали цикл, значит имеем дело с простым числом. |
Сообщ.
#7
,
|
|
|
Platonis. Спасибо я уже наклепал. Но спасибо за помощь.
|
Сообщ.
#8
,
|
|
|
Вот блин, не заметил, что почти точно такой же ответ уже был прислан, тока в другой теме.
Зачем ты создал две одинаковые темы? |
Сообщ.
#9
,
|
|
|
Platonis, Ты не чего не путаешь. Что то я не вижу ткни мне пальчиком.
|
Сообщ.
#10
,
|
|
|
Вторая тема - копия Посмотри!!!
|
Сообщ.
#11
,
|
|
|
Platonis, Наверное, не кто не подсказывал вот и решил ее создать. Но пусть ее модератор удалит повторяющую тему.
|