[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/sNh3CRcZ    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Aug 20:
; two more random exercises

(define (ilog b n)
  (let loop1 ((lo 0) (b^lo 1) (hi 1) (b^hi b))
    (if (< b^hi n) (loop1 hi b^hi (* hi 2) (* b^hi b^hi))
      (let loop2 ((lo lo) (b^lo b^lo) (hi hi) (b^hi b^hi))
        (if (<= (- hi lo) 1) (if (= b^hi n) hi lo)
          (let* ((mid (quotient (+ lo hi) 2))
                 (b^mid (* b^lo (expt b (- mid lo)))))
            (cond ((< n b^mid) (loop2 lo b^lo mid b^mid))
                  ((< b^mid n) (loop2 mid b^mid hi b^hi))
                  (else mid))))))))

(define (middle-square n)
  (let* ((len (+ (ilog 10 n) 1)) (len2 (quotient len 2)))
    (modulo (quotient (* n n) (expt 10 len2)) (expt 10 len))))

(let loop ((n 675248) (k 25))
  (when (positive? k)
    (display n) (newline)
    (loop (middle-square n) (- k 1))))

(define (randu n) (modulo (* 65539 n) (expt 2 31)))

(let loop ((n 1) (k 25))
  (when (positive? k)
    (display n) (newline)
    (loop (randu n) (- k 1))))


Output:
675248
959861
333139
981593
524817
432883
387691
304311
605184
247673
341914
905183
356263
923325
529055
899193
548051
359898
526570
275964
156129
376264
574597
161712
150770
1
65539
393225
1769499
7077969
26542323
95552217
334432395
1146624417
1722371299
14608041
1766175739
1875647473
1800754131
366148473
1022489195
692115265
1392739779
2127401289
229749723
1559239569
845238963
1775695897
899541067
153401569


Create a new paste based on this one


Comments: