about summary refs log tree commit diff
path: root/THT/B/QG-2016/remainder.scm
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-19 22:28:52 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-02-19 22:28:52 +0700
commitd40c9b81db3caff8ecca79df92241bc0c28a468c (patch)
tree41985e48e9da1fbfb65af8105bfa0304744320bd /THT/B/QG-2016/remainder.scm
parenta53c4128c29f98b5fdfd9b0e13a3bbe094d975ec (diff)
downloadcp-d40c9b81db3caff8ecca79df92241bc0c28a468c.tar.gz
Translate easy programs to Scheme
Diffstat (limited to 'THT/B/QG-2016/remainder.scm')
-rw-r--r--THT/B/QG-2016/remainder.scm20
1 files changed, 20 insertions, 0 deletions
diff --git a/THT/B/QG-2016/remainder.scm b/THT/B/QG-2016/remainder.scm
new file mode 100644
index 0000000..3df8468
--- /dev/null
+++ b/THT/B/QG-2016/remainder.scm
@@ -0,0 +1,20 @@
+(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)))))