> 1 <

Автор Сообщение

NiMdis

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#5586   2012-01-23 00:02 GMT+3 часа(ов)      
Задание : найти заданное количество простых чисел (начиная от 2)

Решение :

(defun issimple (a b)
(cond
((> b (/ a 2)) T)
((eq (mod a b) 0) Nil)
(T (issimple a (+ b 1)))
)
)

(defun subf (a b)
(cond
((eq a 0) Nil)
((issimple b 2) (cons b (subf (- a 1) (+ b 1))))
(T (subf a (+ b 1)))
)
)

(defun fun (a)
(subf a 2)
)


Проблема:программа отлично работает до ввода количества простых чисел = 341, если ввести больше ,то происходит Program stack overflow Помогите пожалуйста исправить данную ошибку, чтобы можно было вводить количество простых чисел 1000+

Пример ошибки

megamanx

Members


Статус

307 сообщений

Где: Russia
Род занятий:
Возраст:

#5587   2012-01-23 11:39 GMT+3 часа(ов)      
В реализации вроде должна сработать TCO. Я попробовал на SBCL - работает до 10000 нормально, дальше не пробовал (долго ждать).
 * (trace fun)
(FUN)
* (fun 10)
0: (FUN 10)
0: FUN returned (2 3 5 7 11 13 17 19 23 29)
(2 3 5 7 11 13 17 19 23 29)
* (fun 100)
0: (FUN 100)
0: FUN returned
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191
193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283
293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401
409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509
521 523 541)
(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103
107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313
317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433
439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541)
*

Поменяй интерпретатор.
I wish I'd made you angry earlier
> 1 <


Онлайн :

0 пользователь(ей), 39 гость(ей) :




Реклама на сайте: