(use math.prime) (let* ((n (read))) (let1 result (let loop ((n n) (primes *primes*)) (let1 prime (car primes) (cond ((= n 1) #f) ((< n prime) #f) (else (let-values (((m divider) (let loop ((n n) (m 0) (divider 1)) (if (and (= (mod n prime) 0) (< m 2)) (loop (div n prime) (+ m 1) (* prime divider)) (values m divider))))) (if (> m 1) (not (= n divider)) (loop m (cdr primes)))))))) (print (if result "YES" "NO"))))