結果
| 問題 |
No.2637 Factorize?
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-05-16 02:30:23 |
| 言語 | Common Lisp (sbcl 2.5.0) |
| 結果 |
AC
|
| 実行時間 | 24 ms / 2,000 ms |
| コード長 | 1,027 bytes |
| コンパイル時間 | 74 ms |
| コンパイル使用メモリ | 33,596 KB |
| 実行使用メモリ | 38,996 KB |
| 最終ジャッジ日時 | 2024-12-20 10:40:39 |
| 合計ジャッジ時間 | 2,023 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
コンパイルメッセージ
; compiling file "/home/judge/data/code/Main.lisp" (written 20 DEC 2024 10:40:36 AM): ; wrote /home/judge/data/code/Main.fasl ; compilation finished in 0:00:00.016
ソースコード
(defun sieve (limit)
(let ((is-prime (make-array (1+ limit) :initial-element t)))
(setf (aref is-prime 0) nil
(aref is-prime 1) nil)
(loop for i from 2 to (isqrt limit) do
(when (aref is-prime i)
(loop for j from (* i i) to limit by i do
(setf (aref is-prime j) nil))))
(loop for i from 2 to limit
when (aref is-prime i)
collect i)))
(defun prime-factors (n primes)
(let ((factors '()))
(dolist (prime primes)
(loop while (zerop (mod n prime)) do
(push prime factors)
(setf n (/ n prime))))
(if (> n 1) (push n factors))
(nreverse factors)))
(defun first-factor-pair (n)
(if (<= n 1)
(list 1 1)
(let* ((limit (isqrt n))
(primes (sieve limit))
(factors (prime-factors n primes)))
(list 1 (apply #'* factors)))))
(defun main ()
(let ((n (parse-integer (read-line))))
(let ((pair (first-factor-pair n)))
(format t "~{~a~^ ~}~%" pair))))
(main)