вторник, 23 марта 2010 г.

Простые числа

Прочёл сейчас в IT happens историю, про мальчика, который решил за 10 минут задачу "написать программу, которая печатает простые числа от 1 до 100". Его программа выглядела так:

10 CLS
20 PRINT "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"
30 END


А вот как выглядит моя "десятиминутная" программа, показывающая превосходство newLISP над другими высокоуровневыми языками программирования:

(define (prime? x) (= (first (factor x)) x))
(println (filter prime? (sequence 2 100)))


Забавно, что открыв мануал на странице с описанием функции factor, я наткнулся на готовое решение, написанное, вероятно, самим Лутцем:

(define (primes n , p)
(dotimes (e n)
(if (= (length (factor e)) 1)
(push e p -1))) p)
(print (primes 100))


Решение Лутца, что характерно, работает на 20% быстрее быстрее.

> (time (filter prime? (sequence 2 1000000)))
2203,125
> (time (primes 1000000))
1796,875

Комментариев нет:

Отправить комментарий

Архив блога