about summary refs log tree commit diff
path: root/tht/B/QG-2016/remainder.scm
blob: 8360da1219b07c353736f73b27d82340d5ce08f0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(define (sqr x) (* x x))
(define (pow x y z)
  (cond ((= y 1) (remainder x z))
         ((= (remainder y 2) 0) (remainder (sqr (pow x (quotient y 2) z)) z))
         (else (remainder (* (sqr (pow x (quotient y 2) z)) x) z))))
(with-output-to-file "REMAINDER.TXT" (lambda () (for-each
  (lambda (l)
    (let* ((a (integer-expt 10 (string-length (number->string (list-ref l 0)))))
           (m (* (list-ref l 2) (- a 1)))
           (p (pow a (list-ref l 1) m)))
      (display (quotient (remainder (* (list-ref l 0) (- p 1)) m) (- a 1)))
      (newline)))
  '((12 3 8) (2 15 17) (456 6 1296) (1234 100 9) (11223344 1000000 142857)
    (55667788 10000000 1000000007) (1357 24682468 999999999)
    (24680 1357913579 777777777) (998 1000000000000 999)
    (1234 11111111111111 30) (1 222222222222222 123456789)
    (2016 666666666666666 8888888888) (11223344 555666777888999 1357924680)
    (999999999999999967 999999999999999877 999999999999999989)
    (123456789123456789 123456789123456789 987654321123456789)))))