Problem 3
(require 'calc-ext) (defvar calc-command-flags nil) (defun find-factor (num) (catch 'found (let ((i 2)) (while (math-lessp (math-sub i 1) (math-floor (math-sqrt num))) (if (math-equal (math-mod num i) 0) (throw 'found i) (setq i (math-add i 1))) )))) (let ((num (math-read-number (car argv))) factor rst) (while (setq factor (find-factor num)) (setq num (math-div num factor)) ) (princ num) (princ "\n") )
メモ
- calc-ext は calc-command-flags を定義していないと動作しないらしい.
- calc-ext の math- 系の関数を使えば, 多倍長計算ができる.
- math-read-number で文字列から多倍長型に変換.
- 多倍長計算用の関数は calc の manual の 18.5.7 Calculator Internals を参考にすればよい.