Count in factors: Difference between revisions
Content added Content deleted
(added ocaml (the function prime_decomposition was copy-pasted from the page Prime_decomposition)) |
|||
Line 260: | Line 260: | ||
}</lang> |
}</lang> |
||
=={{header|Common Lisp}}== |
|||
Auto extending prime list: |
|||
<lang lisp>(defparameter *primes* |
|||
(make-array 10 :adjustable t :fill-pointer 0 :element-type 'integer)) |
|||
(mapc #'(lambda (x) (vector-push x *primes*)) '(2 3 5 7)) |
|||
(defun extend-primes (n) |
|||
(let ((p (+ 2 (elt *primes* (1- (length *primes*)))))) |
|||
(loop for i = p then (+ 2 i) |
|||
while (<= (* i i) n) do |
|||
(if (primep i t) (vector-push-extend i *primes*))))) |
|||
(defun primep (n &optional skip) |
|||
(if (not skip) (extend-primes n)) |
|||
(if (= n 1) nil |
|||
(loop for p across *primes* while (<= (* p p) n) |
|||
never (zerop (mod n p))))) |
|||
(defun factors (n) |
|||
(extend-primes n) |
|||
(loop with res for x across *primes* while (> n (* x x)) do |
|||
(loop while (zerop (rem n x)) do |
|||
(setf n (/ n x)) |
|||
(push x res)) |
|||
finally (return (if (> n 1) (cons n res) res)))) |
|||
(loop for n from 1 do |
|||
(format t "~a: ~{~a~^ × ~}~%" n (reverse (factors n))))</lang>output<lang>1: |
|||
2: 2 |
|||
3: 3 |
|||
4: 4 |
|||
5: 5 |
|||
6: 2 × 3 |
|||
7: 7 |
|||
8: 2 × 2 × 2 |
|||
9: 9 |
|||
10: 2 × 5 |
|||
11: 11 |
|||
12: 2 × 2 × 3 |
|||
13: 13 |
|||
14: 2 × 7 |
|||
...</lang> |
|||
=={{header|D}}== |
=={{header|D}}== |
||
{{trans|Ada}} |
{{trans|Ada}} |
||
Line 341: | Line 384: | ||
writefln("%2d = %s", i, productStr(factorize(i))) ; |
writefln("%2d = %s", i, productStr(factorize(i))) ; |
||
}</lang> |
}</lang> |
||
=={{header|Euphoria}}== |
=={{header|Euphoria}}== |
||
<lang euphoria>function factorize(integer n) |
<lang euphoria>function factorize(integer n) |