Skip to content

Instantly share code, notes, and snippets.

@naoyat
Created May 2, 2012 04:45
Show Gist options
  • Save naoyat/2573764 to your computer and use it in GitHub Desktop.
Save naoyat/2573764 to your computer and use it in GitHub Desktop.
40-32÷2=?小学生「4!」理系「よくわかってんじゃん」文系「やっぱわかんないか~w」
;; a - b ÷ c = d! を満たす自然数の組 (a,b,c,d) ≦1億 を探す
(define MX 1e8)
(let ld ((d 3) (d- 2)) ; d- = (d-1)!
(when (<= (* d d-) MX)
(let lc ((c 2)) ;; c>1
(when (< c d-) ;; b>0
(receive (b r) (quotient&remainder
(* c d (- d- c))
(- c 1))
(when (zero? r)
(let1 a (+ b (* c d))
(when (<= a MX)
(format #t "‾d - ‾d ÷ ‾d = ‾d!¥n" a b c d))))
(lc (+ c 1)))))
(ld (+ d 1) (* d- d))))
;; a - b ÷ c = d! を満たす自然数の組 (a,b,c,d) ≦1億 と
;; a + b ÷ c = d! を満たす自然数の組 (a,b,c,d) ≦1億 を探す
(define MX 1e8)
(let ld ((d 3) (d- 2)) ; d- = (d-1)!
(when (<= (* d d-) MX)
(let lc ((c 2)) ;; c>1
;; (when (< c d-) ;; b>0
(when (<= c (/ MX d)) ;; a = b+cd <= MX; cd <= MX-b
(receive (q r) (quotient&remainder
(* d (- d- c))
(- c 1))
(when (and (not (zero? q)) (zero? r))
(let* ([b (* c q)]
[a (+ b (* c d))])
(when (<= a MX)
(if (< b 0)
(format #t "‾d + ‾d ÷ ‾d = ‾d!¥n" a (- b) c d)
(format #t "‾d - ‾d ÷ ‾d = ‾d!¥n" a b c d)))))
(lc (+ c 1)))))
(ld (+ d 1) (* d- d))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment