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)