-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path051.scm
74 lines (73 loc) · 3.15 KB
/
051.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(add-load-path "." :relative)
(use eulerlib)
; 1の位に来れるのは1,3,7,9
; よって1の位は変化しない
; 数nの各桁の和が3の倍数ならnも3の倍数なので
; 1. 変化するのは3桁 となり
; 2. 求める答えは5桁か6桁 が言える
(define (e51)
(define (prime-count-over? count candidates)
(let loop ((r count) (l candidates) (1st 0))
(cond ((= r 0) 1st)
((> r (length l)) #f)
(else (let* ((i (list->integer (car l)))
(p? (prime? i)))
(loop (if p? (- r 1) r)
(cdr l)
(if (and p? (zero? 1st)) i 1st)))))))
(call/cc
(^(return)
; d = 5
; ***ab, **a*b, *a**b, a***b (b: 1,3,7,9)
(dolist (a (iota 10))
(dolist (b (filter (^b (not (zero? (modulo (+ a b) 3))))
(iota 10)))
(cond ((prime-count-over?
8 (map (^x `(,x ,x ,x ,a ,b)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,x ,a ,x ,b)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,a ,x ,x ,b)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,a ,x ,x ,x ,b)) (iota 9 1)))
=> (^r (return r))))))
; d = 6
; ***abc, **a*bc, **ab*c, *a**bc, *a*b*c,
; *ab**c, a***bc, a**b*c, a*b**c, ab***c (c: 1,3,7,9)
(dolist (a (iota 10))
(dolist (b (iota 10))
(dolist (c (filter (^c (not (zero? (modulo (+ a b c) 3))))
'(1 3 7 9)))
(cond ((prime-count-over?
8 (map (^x `(,x ,x ,x ,a ,b ,c)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,x ,a ,x ,b ,c)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,x ,a ,b ,x ,c)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,a ,x ,x ,b ,c)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,a ,x ,b ,x ,c)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,x ,a ,b ,x ,x ,c)) (iota 9 1)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,a ,x ,x ,x ,b ,c)) (iota 10)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,a ,x ,x ,b ,x ,c)) (iota 10)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,a ,x ,b ,x ,x ,c)) (iota 10)))
=> (^r (return r)))
((prime-count-over?
8 (map (^x `(,a ,b ,x ,x ,x ,c)) (iota 10)))
=> (^r (return r))))))))))