Код Ревью

Сравни свои решения

    #| BEGIN (Введите свое решение) |#
(define (search-for-primes start end port)
  (define (transform n)
    (if (= (remainder n 2) 0)
        (+ n 1)
        n))
  (define (iter n m)
    (timed-prime-test n port)
    (if (< (+ n 2) m)
        (iter (+ n 2) m)
        #f))
  (iter (transform start) end))
#| END |#
    #| BEGIN (Введите свое решение) |#
(define (search-for-primes start end port)
  (define (iter n)
    (cond ((<= n end) (timed-prime-test n port) (iter (+ n 2)))))
  (iter (if (= (remainder start 2) 0)
            (+ start 1)
            start)))
#| END |#
    #| BEGIN (Введите свое решение) |#
(define (search-for-primes start end port)
  (define (iter n)
    (cond ((<= n end) (timed-prime-test n port) (iter (+ n 2)))))
  (iter (if (= (remainder start 2) 0)
            (+ start 1)
            start)))

; Я хз, как с такой точностью давать ответ на вопросы задания
; (search-for-primes 1000 1020)
#|
1009 *** 0.
1013 *** 0.
1019 *** 0.
|#
; (search-for-primes 10000 10038)
#|
10007 *** 0.
10009 *** 0.
10037 *** 0.
|#
; (search-for-primes 100000 100044)
#|
100003 *** 1.0000000000000002e-2
100019 *** 0.
100043 *** 0.%
|#
; (search-for-primes 1000000 1000038)
#|
1000003 *** 0.
1000033 *** 0.
1000037 *** 0.
|#

#| END |#
    #| BEGIN (Введите свое решение) |#
; Необходимые процедуры
; !Важное уточнение! В связи с низкой точностью возвращаемого результата у runtime в реализации LISP'а от MIT, для получения видимого результата будет повторение 1000 раз. Изменена процедура start-prime-test

; Измененная процедура
#|
(define (start-prime-test n start-time)
  (define (loop i k)
    (if (= i k)
        (report-prime (- (runtime) start-time))
        (begin
          (prime? n)
          (loop (+ i 1) k))))
  (if (prime? n)
      (loop 1 1000)
      #f))
|#

; Решение
(define (search-for-primes start end port)
  (define (iter n)
    (cond ((<= n end) (timed-prime-test n port) (iter (+ n 2)))))
  (iter (if (= (remainder start 2) 0)
            (+ start 1)
            start)))

; (search-for-primes 1000 1020)
#|
1009 *** .05
1013 *** .04999999999999999
1019 *** .05000000000000002
Среднее: 0.05
Возьмем среднее как основу для вычислений
|#

; (search-for-primes 10000 10038)
#|
10007 *** .17
10009 *** .16999999999999998
10037 *** .15000000000000002
Среднее: 0.16(3)
Ожидается: 0.05 * √10 = 0.1581...
Разница: 0.005219...
Вывод: Ожидаемое и полученное значения с хорошей точностью равны
|#

; (search-for-primes 100000 100044)
#|
100003 *** .5199999999999999
100019 *** .52
100043 *** .52
Среднее: 0.52
Ожидается: 0.163 * √10 = 0.5155...
Разница: 0.004549...
Вывод: *предыдущий вывод*
|#

; (search-for-primes 1000000 1000038)
#|
1000003 *** 1.5699999999999998
1000033 *** 1.5799999999999996
1000037 *** 1.5600000000000005
Среднее: 1.57
Ожидаемое: 0.52 * √10 = 1.6444...
Разница: 0.07438...
Вывод: разница более чем в 10 раз стала больше, чем в предыдущих вычислениях. Предположительно, если продолжить увеличивать значения для вычислений, можно будет заметить, что разница или погрешность становится все больше и больше.
|#

#|
Из проведенного исследования можно сделать вывод:
Время, которое затрачивается на выполнение
программы, не со 100%-ой точностью
пропорционально числу шагов в алгоритме. Время
будет меняться от запуска к запуску из-за
внешних факторов
|#

#| END |#
    #| BEGIN (Введите свое решение) |#
(define (search-for-primes start end port)
  (define (transform n)
    (if (= (remainder n 2) 0)
        (+ n 1)
        n))
  (define (iter n m)
    (timed-prime-test n port)
    (if (< (+ n 2) m)
        (iter (+ n 2) m)
        #f))
  (iter (transform start) end))
#| END |#
    #| BEGIN (Введите свое решение) |#
(define (search-for-primes start end port)
  (define (iter n)
    (cond ((<= n end) (timed-prime-test n port) (iter (+ n 2)))))
  (iter (if (= (remainder start 2) 0)
            (+ start 1)
            start)))
#| END |#
    #| BEGIN (Введите свое решение) |#
(define (search-for-primes start end port)
  (define (iter n)
    (cond ((<= n end) (timed-prime-test n port) (iter (+ n 2)))))
  (iter (if (= (remainder start 2) 0)
            (+ start 1)
            start)))

; Я хз, как с такой точностью давать ответ на вопросы задания
; (search-for-primes 1000 1020)
#|
1009 *** 0.
1013 *** 0.
1019 *** 0.
|#
; (search-for-primes 10000 10038)
#|
10007 *** 0.
10009 *** 0.
10037 *** 0.
|#
; (search-for-primes 100000 100044)
#|
100003 *** 1.0000000000000002e-2
100019 *** 0.
100043 *** 0.%
|#
; (search-for-primes 1000000 1000038)
#|
1000003 *** 0.
1000033 *** 0.
1000037 *** 0.
|#

#| END |#
    #| BEGIN (Введите свое решение) |#
; Необходимые процедуры
; !Важное уточнение! В связи с низкой точностью возвращаемого результата у runtime в реализации LISP'а от MIT, для получения видимого результата будет повторение 1000 раз. Изменена процедура start-prime-test

; Измененная процедура
#|
(define (start-prime-test n start-time)
  (define (loop i k)
    (if (= i k)
        (report-prime (- (runtime) start-time))
        (begin
          (prime? n)
          (loop (+ i 1) k))))
  (if (prime? n)
      (loop 1 1000)
      #f))
|#

; Решение
(define (search-for-primes start end port)
  (define (iter n)
    (cond ((<= n end) (timed-prime-test n port) (iter (+ n 2)))))
  (iter (if (= (remainder start 2) 0)
            (+ start 1)
            start)))

; (search-for-primes 1000 1020)
#|
1009 *** .05
1013 *** .04999999999999999
1019 *** .05000000000000002
Среднее: 0.05
Возьмем среднее как основу для вычислений
|#

; (search-for-primes 10000 10038)
#|
10007 *** .17
10009 *** .16999999999999998
10037 *** .15000000000000002
Среднее: 0.16(3)
Ожидается: 0.05 * √10 = 0.1581...
Разница: 0.005219...
Вывод: Ожидаемое и полученное значения с хорошей точностью равны
|#

; (search-for-primes 100000 100044)
#|
100003 *** .5199999999999999
100019 *** .52
100043 *** .52
Среднее: 0.52
Ожидается: 0.163 * √10 = 0.5155...
Разница: 0.004549...
Вывод: *предыдущий вывод*
|#

; (search-for-primes 1000000 1000038)
#|
1000003 *** 1.5699999999999998
1000033 *** 1.5799999999999996
1000037 *** 1.5600000000000005
Среднее: 1.57
Ожидаемое: 0.52 * √10 = 1.6444...
Разница: 0.07438...
Вывод: разница более чем в 10 раз стала больше, чем в предыдущих вычислениях. Предположительно, если продолжить увеличивать значения для вычислений, можно будет заметить, что разница или погрешность становится все больше и больше.
|#

#|
Из проведенного исследования можно сделать вывод:
Время, которое затрачивается на выполнение
программы, не со 100%-ой точностью
пропорционально числу шагов в алгоритме. Время
будет меняться от запуска к запуску из-за
внешних факторов
|#

#| END |#