-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path20160127_Losser.lisp
37 lines (28 loc) · 1022 Bytes
/
20160127_Losser.lisp
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
; SERI07 - Strange But Easy
; http://www.spoj.com/problems/SERI07/
(defconstant +max-integer+ 10000)
(defun small-prime-p (n)
(do ((i 2 (1+ i))) ((= i n) t)
(when (zerop (mod n i)) (return nil))))
(defvar *small-primes*
(loop for i from 2 to 1000 when (small-prime-p i) collect i))
(defun prime-p (n)
(if (<= n 1000)
(find n *small-primes*)
(dolist (p *small-primes* t)
(when (zerop (mod n p)) (return nil)))))
(defvar cur 1)
(defun get-next-prime ()
(incf cur)
(block nil (loop
(when (prime-p cur) (return))
(incf cur)))
cur)
(defvar *primes* (make-array (* 3 +max-integer+)))
(loop for i below (* 3 +max-integer+) do
(setf (aref *primes* i) (get-next-prime)))
(defvar *delta* (loop for i from 2 below (* 3 +max-integer+)
collect (- (aref *primes* i) (aref *primes* (1- i)))))
(dolist (n *delta*)
(if (< n (* 26 2)) (princ (code-char (+ (char-code #\a) (/ n 2))))
(princ (code-char (+ (char-code #\A) (- (/ n 2) 26))))))