codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
; vedic divisibility (define (digits n . args) (let ((b (if (null? args) 10 (car args)))) (let loop ((n n) (d '())) (if (zero? n) d (loop (quotient n b) (cons (modulo n b) d)))))) (define (undigits ds . args) (let ((b (if (null? args) 10 (car args)))) (let loop ((ds ds) (n 0)) (if (null? ds) n (loop (cdr ds) (+ (* n b) (car ds))))))) (define (but-last x) (undigits (reverse (cdr (reverse (digits x)))))) (define (last x) (car (reverse (digits x)))) (define (osculator n) (define (f x) (+ (but-last (* n x)) 1)) (let ((ds (digits n))) (case (car (reverse ds)) ((1) (f 9)) ((3) (f 3)) ((7) (f 7)) ((9) (f 1)) (else (error 'osculator "unsupported"))))) (define (divisible? n d) (let ((osc (osculator d))) (let loop ((n n)) (let ((next (+ (but-last n) (* (last n) osc)))) (if (< next n) (loop next) (zero? (modulo n d))))))) (display (divisible? 13174584 23)) (newline) (display (divisible? 175121 37)) (newline) (display (divisible? 134567 29)) (newline)
Private
[
?
]
Run code
Submit