Count in factors: Difference between revisions

Add Refal
(Added Arturo implementation)
(Add Refal)
 
(26 intermediate revisions by 16 users not shown)
Line 24:
 
=={{header|11l}}==
{{trans|C++}}<langsyntaxhighlight lang="11l">F get_prime_factors(=li)
I li == 1
R ‘1’
Line 43:
L(x) 1..17
print(‘#4: #.’.format(x, get_prime_factors(x)))
print(‘2144: ’get_prime_factors(2144))</langsyntaxhighlight>
 
{{out}}
Line 68:
 
=={{header|360 Assembly}}==
<langsyntaxhighlight lang="360asm">* Count in factors 24/03/2017
COUNTFAC CSECT assist plig\COUNTFAC
USING COUNTFAC,R13 base register
Line 141:
PG DS CL80 buffer
YREGS
END COUNTFAC</langsyntaxhighlight>
{{out}}
<pre style="height:20ex">
Line 184:
39=3*13
40=2*2*2*5
</pre>
 
=={{header|Action!}}==
<syntaxhighlight lang="action!">PROC PrintFactors(CARD a)
BYTE notFirst
CARD p
 
IF a=1 THEN
PrintC(a) RETURN
FI
 
p=2 notFirst=0
WHILE p<=a
DO
IF a MOD p=0 THEN
IF notFirst THEN
Put('x)
FI
notFirst=1
PrintC(p)
a==/p
ELSE
p==+1
FI
OD
RETURN
 
PROC Main()
CARD i
 
FOR i=1 TO 1000
DO
PrintC(i) Put('=)
PrintFactors(i)
PutE()
OD
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Count_in_factors.png Screenshot from Atari 8-bit computer]
<pre>
1=1
2=2
3=3
4=2x2
5=5
...
995=5x199
996=2x2x3x83
997=997
998=2x499
999=3x3x3x37
1000=2x2x2x5x5x5
</pre>
 
Line 191 ⟶ 243:
 
;count.adb:
<langsyntaxhighlight Adalang="ada">with Ada.Command_Line, Ada.Text_IO, Prime_Numbers;
procedure Count is
Line 220 ⟶ 272:
exit when N > Max_N;
end loop;
end Count;</langsyntaxhighlight>
 
{{out}}
Line 240 ⟶ 292:
 
=={{header|ALGOL 68}}==
{{trans|Euphoria}}<syntaxhighlight lang ALGOL68="algol68">OP +:= = (REF FLEX []INT a, INT b) VOID:
OP +:= = (REF FLEX []INT a, INT b) VOID:
BEGIN
[⌈aUPB a + 1] INT c;
c[:⌈aUPB a] := a;
c[⌈aUPB a+1:] := b;
a := c
END;
Line 275 ⟶ 328:
OD;
print ((new line))
OD</lang>
</syntaxhighlight>
{{out}}
<pre>1 = 1
Line 299 ⟶ 353:
21 = 3 × 7
22 = 2 × 11</pre>
 
=={{header|ALGOL W}}==
<syntaxhighlight lang="algolw">
begin % show numbers and their prime factors %
% shows nand its prime factors %
procedure showFactors ( integer value n ) ;
if n <= 3 then write( i_w := 1, s_w := 0, n, ": ", n )
else begin
integer v, f; logical first;
first := true;
v := n;
write( i_w := 1, s_w := 0, n, ": " );
while not odd( v ) and v > 1 do begin
if not first then writeon( s_w := 0, " x " );
writeon( i_w := 1, s_w := 0, 2 );
v := v div 2;
first := false
end while_not_odd_v ;
f := 1;
while v > 1 do begin
f := f + 2;
while v rem f = 0 do begin
if not first then writeon( s_w := 0, " x " );
writeon( i_w := 1, s_w := 0, f );
v := v div f;
first := false
end while_v_rem_f_eq_0
end while_v_gt_0_and_f_le_v
end showFactors ;
 
% show the factors of various ranges - same as Wren %
for i := 1 until 9 do showFactors( i );
write( "... " );
for i := 2144 until 2154 do showFactors( i );
write( "... " );
for i := 9987 until 9999 do showFactors( i )
end.
</syntaxhighlight>
{{out}}
<pre>
1: 1
2: 2
3: 3
4: 2 x 2
5: 5
6: 2 x 3
7: 7
8: 2 x 2 x 2
9: 3 x 3
...
2144: 2 x 2 x 2 x 2 x 2 x 67
2145: 3 x 5 x 11 x 13
2146: 2 x 29 x 37
2147: 19 x 113
2148: 2 x 2 x 3 x 179
2149: 7 x 307
2150: 2 x 5 x 5 x 43
2151: 3 x 3 x 239
2152: 2 x 2 x 2 x 269
2153: 2153
2154: 2 x 3 x 359
...
9987: 3 x 3329
9988: 2 x 2 x 11 x 227
9989: 7 x 1427
9990: 2 x 3 x 3 x 3 x 5 x 37
9991: 97 x 103
9992: 2 x 2 x 2 x 1249
9993: 3 x 3331
9994: 2 x 19 x 263
9995: 5 x 1999
9996: 2 x 2 x 3 x 7 x 7 x 17
9997: 13 x 769
9998: 2 x 4999
9999: 3 x 3 x 11 x 101
</pre>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
<lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program countFactors.s */
Line 683 ⟶ 814:
/***************************************************/
.include "../affichage.inc"
</syntaxhighlight>
</lang>
<pre>
Number 2144 : 2 2 2 2 2 67
Line 689 ⟶ 820:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">loop 1..30 'x [
fs: [1]
if x<>1 -> fs: factors.prime x
print [pad to :string x 3 "=" join.with:" x " to [:string] fs]
]</langsyntaxhighlight>
 
{{out}}
Line 730 ⟶ 861:
=={{header|AutoHotkey}}==
{{trans|D}}
<langsyntaxhighlight AutoHotkeylang="autohotkey">factorize(n){
if n = 1
return 1
Line 746 ⟶ 877:
Loop 22
out .= A_Index ": " factorize(A_index) "`n"
MsgBox % out</langsyntaxhighlight>
{{out}}
<pre>1: 1
Line 772 ⟶ 903:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f COUNT_IN_FACTORS.AWK
BEGIN {
Line 799 ⟶ 930:
return(substr(f,1,length(f)-1))
}
</syntaxhighlight>
</lang>
<p>output:</p>
<pre>
Line 821 ⟶ 952:
6358=2*11*17*17
</pre>
 
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
<syntaxhighlight lang="applesoftbasic"> 100 FOR I = 1 TO 20
110 GOSUB 200"FACTORIAL
120 PRINT I" = "FA$
130 NEXT I
140 END
 
200 FA$ = "1"
210 LET NUM = I
220 LET O = 5 - (I = 1) * 4
230 FOR F = 2 TO I
240 LET M = INT (NUM / F) * F
250 IF NUM - M GOTO 300
260 LET NUM = NUM / F
270 LET F$ = STR $(F)
280 FA$ = FA$ + " X " + F$
290 LET F = F - 1
 
300 NEXT F
310 FA$ = MID$ (FA$,O)
320 RETURN </syntaxhighlight>
 
==={{header|BASIC256}}===
{{trans|Run BASIC}}
<syntaxhighlight lang="freebasic">for i = 1 to 20
print i; " = "; factorial$(i)
next i
end
 
function factorial$ (num)
factor$ = "" : x$ = ""
if num = 1 then return "1"
fct = 2
while fct <= num
if (num mod fct) = 0 then
factor$ += x$ + string(fct)
x$ = " x "
num /= fct
else
fct += 1
end if
end while
return factor$
end function</syntaxhighlight>
 
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
{{trans|Run BASIC}}
<syntaxhighlight lang="qbasic">100 cls
110 for i = 1 to 20
120 rem for i = 1000 to 1016
130 print i;"= ";factorial$(i)
140 next i
150 end
160 function factorial$(num)
170 factor$ = "" : x$ = ""
180 if num = 1 then print "1"
190 fct = 2
200 while fct <= num
210 if (num mod fct) = 0 then
220 factor$ = factor$+x$+str$(fct)
230 x$ = " x "
240 num = num/fct
250 else
260 fct = fct+1
270 endif
280 wend
290 print factor$
300 end function</syntaxhighlight>
 
==={{header|True BASIC}}===
{{trans|Run BASIC}}
<syntaxhighlight lang="qbasic">FUNCTION factorial$ (num)
LET f$ = ""
LET x$ = ""
IF num = 1 THEN LET f$ = "1"
LET fct = 2
DO WHILE fct <= num
IF MOD(num, fct) = 0 THEN
LET f$ = f$ & x$ & STR$(fct)
LET x$ = " x "
LET num = num / fct
ELSE
LET fct = fct + 1
END IF
LOOP
LET factorial$ = f$
END FUNCTION
 
FOR i = 1 TO 20
PRINT i; "= "; factorial$(i)
NEXT i
END</syntaxhighlight>
 
==={{header|Yabasic}}===
{{trans|Run BASIC}}
<syntaxhighlight lang="freebasic">for i = 1 to 20
print i, " = ", factorial$(i)
next i
end
 
sub factorial$ (num)
local f$, x$
f$ = "" : x$ = ""
if num = 1 return "1"
fct = 2
while fct <= num
if mod(num, fct) = 0 then
f$ = f$ + x$ + str$(fct)
x$ = " x "
num = num / fct
else
fct = fct + 1
end if
wend
return f$
end sub</syntaxhighlight>
 
=={{header|BBC BASIC}}==
<langsyntaxhighlight lang="bbcbasic"> FOR i% = 1 TO 20
PRINT i% " = " FNfactors(i%)
NEXT
Line 841 ⟶ 1,091:
ENDWHILE
= LEFT$(f$, LEN(f$) - 3)
</syntaxhighlight>
</lang>
Output:
<pre> 1 = 1
Line 867 ⟶ 1,117:
Lists the first 100 entries in the sequence. If you wish to extend that, the upper limit is implementation dependent, but may be as low as 130 for an interpreter with signed 8 bit data cells (131 is the first prime outside that range).
 
<langsyntaxhighlight lang="befunge">1>>>>:.48*"=",,::1-#v_.v
$<<<^_@#-"e":+1,+55$2<<<
v4_^#-1:/.:g00_00g1+>>0v
>8*"x",,:00g%!^!%g00:p0<</langsyntaxhighlight>
 
{{out}}
Line 893 ⟶ 1,143:
=={{header|C}}==
Code includes a dynamically extending prime number list. The program doesn't stop until you kill it, or it runs out of memory, or it overflows.
<langsyntaxhighlight Clang="c">#include <stdio.h>
#include <stdlib.h>
 
Line 956 ⟶ 1,206:
}
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>1 = 1
Line 977 ⟶ 1,227:
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Collections.Generic;
 
Line 1,022 ⟶ 1,272:
}
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <iomanip>
using namespace std;
Line 1,059 ⟶ 1,309:
cout << "\n\n";
return system( "pause" );
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,092 ⟶ 1,342:
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="lisp">(ns listfactors
(:gen-class))
 
Line 1,112 ⟶ 1,362:
(doseq [q (range 1 26)]
(println q " = " (clojure.string/join " x "(factors q))))
</syntaxhighlight>
</lang>
{{Output}}
<pre>
Line 1,143 ⟶ 1,393:
 
=={{header|CoffeeScript}}==
<langsyntaxhighlight lang="coffeescript">count_primes = (max) ->
# Count through the natural numbers and give their prime
# factorization. This algorithm uses no division.
Line 1,182 ⟶ 1,432:
 
num_primes = count_primes 10000
console.log num_primes</langsyntaxhighlight>
 
=={{header|Common Lisp}}==
Auto extending prime list:
<langsyntaxhighlight lang="lisp">(defparameter *primes*
(make-array 10 :adjustable t :fill-pointer 0 :element-type 'integer))
 
Line 1,212 ⟶ 1,462:
 
(loop for n from 1 do
(format t "~a: ~{~a~^ × ~}~%" n (reverse (factors n))))</langsyntaxhighlight>
{{out}}
<pre>1:
Line 1,230 ⟶ 1,480:
...</pre>
Without saving the primes, and not all that much slower (probably because above code was not well-written):
<langsyntaxhighlight lang="lisp">(defun factors (n)
(loop with res for x from 2 to (isqrt n) do
(loop while (zerop (rem n x)) do
Line 1,238 ⟶ 1,488:
 
(loop for n from 1 do
(format t "~a: ~{~a~^ × ~}~%" n (reverse (factors n))))</langsyntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight lang="d">int[] factorize(in int n) pure nothrow
in {
assert(n > 0);
Line 1,262 ⟶ 1,512:
foreach (i; 1 .. 22)
writefln("%d: %(%d × %)", i, i.factorize());
}</langsyntaxhighlight>
{{out}}
<pre>1: 1
Line 1,287 ⟶ 1,537:
===Alternative Version===
{{libheader|uiprimes}} Library ''uiprimes'' is a homebrew library to generate prime numbers upto the maximum 32bit unsigned integer range 2^32-1, by using a pre-generated bit array of [[Sieve of Eratosthenes]] (a dll in size of ~256M bytes :p ).
<langsyntaxhighlight lang="d">import std.stdio, std.math, std.conv, std.algorithm,
std.array, std.string, import xt.uiprimes;
 
Line 1,318 ⟶ 1,568:
foreach (i; 1 .. 21)
writefln("%2d = %s", i, productStr(factorize(i)));
}</langsyntaxhighlight>
 
=={{header|DCL}}==
Assumes file primes.txt is a list of prime numbers;
<langsyntaxhighlight DCLlang="dcl">$ close /nolog primes
$ on control_y then $ goto clean
$
Line 1,365 ⟶ 1,615:
$
$ clean:
$ close /nolog primes</langsyntaxhighlight>
{{out}}
<pre>$ @count_in_factors
Line 1,380 ⟶ 1,630:
 
=={{header|DWScript}}==
<langsyntaxhighlight lang="delphi">function Factorize(n : Integer) : String;
begin
if n <= 1 then
Line 1,397 ⟶ 1,647:
var i : Integer;
for i := 1 to 22 do
PrintLn(IntToStr(i) + ': ' + Factorize(i));</langsyntaxhighlight>
{{out}}
<pre>1: 1
Line 1,421 ⟶ 1,671:
21: 3 * 7
22: 2 * 11</pre>
 
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
proc decompose num . primes[] .
primes[] = [ ]
t = 2
while t * t <= num
if num mod t = 0
primes[] &= t
num = num / t
else
t += 1
.
.
primes[] &= num
.
for i = 1 to 30
write i & ": "
decompose i primes[]
for j = 1 to len primes[]
if j > 1
write " x "
.
write primes[j]
.
print ""
primes[] = [ ]
.
</syntaxhighlight>
{{out}}
<pre>
1: 1
2: 2
3: 3
4: 2 x 2
5: 5
6: 2 x 3
7: 7
8: 2 x 2 x 2
9: 3 x 3
10: 2 x 5
11: 11
12: 2 x 2 x 3
13: 13
14: 2 x 7
15: 3 x 5
16: 2 x 2 x 2 x 2
17: 17
18: 2 x 3 x 3
19: 19
20: 2 x 2 x 5
21: 3 x 7
22: 2 x 11
23: 23
24: 2 x 2 x 2 x 3
25: 5 x 5
26: 2 x 13
27: 3 x 3 x 3
28: 2 x 2 x 7
29: 29
30: 2 x 3 x 5
</pre>
 
=={{header|EchoLisp}}==
<langsyntaxhighlight lang="scheme">
(define (task (nfrom 2) (range 20))
(for ((i (in-range nfrom (+ nfrom range))))
(writeln i "=" (string-join (prime-factors i) " x "))))
 
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,456 ⟶ 1,768:
 
=={{header|Eiffel}}==
<syntaxhighlight lang="eiffel">
<lang Eiffel>
 
class
Line 1,523 ⟶ 1,835:
end
 
</syntaxhighlight>
</lang>
Test Output:
 
Line 1,553 ⟶ 1,865:
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule RC do
def factor(n), do: factor(n, 2, [])
Line 1,564 ⟶ 1,876:
 
Enum.each(1..20, fn n ->
IO.puts "#{n}: #{Enum.join(RC.factor(n)," x ")}" end)</langsyntaxhighlight>
 
{{out}}
Line 1,591 ⟶ 1,903:
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">function factorize(integer n)
sequence result
integer k
Line 1,618 ⟶ 1,930:
end for
printf(1, "%d\n", factors[$])
end for</langsyntaxhighlight>
{{out}}
<pre>1: 1
Line 1,645 ⟶ 1,957:
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">let factorsOf (num) =
Seq.unfold (fun (f, n) ->
let rec genFactor (f, n) =
Line 1,655 ⟶ 1,967:
let showLines = Seq.concat (seq { yield seq{ yield(Seq.singleton 1)}; yield (Seq.skip 2 (Seq.initInfinite factorsOf))})
 
showLines |> Seq.iteri (fun i f -> printfn "%d = %s" (i+1) (String.Join(" * ", Seq.toArray f)))</langsyntaxhighlight>
{{out}}
<pre>1 = 1
Line 1,680 ⟶ 1,992:
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: io kernel math.primes.factors math.ranges prettyprint
sequences ;
 
Line 1,687 ⟶ 1,999:
[ " × " write ] [ pprint ] interleave nl ;
 
"1: 1" print 2 20 [a,b] [ .factors ] each</langsyntaxhighlight>
{{out}}
<pre>
Line 1,713 ⟶ 2,025:
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: .factors ( n -- )
2
begin 2dup dup * >=
Line 1,727 ⟶ 2,039:
1+ 2 ?do i . ." : " i .factors cr loop ;
 
15 main bye</langsyntaxhighlight>
 
=={{header|Fortran}}==
Line 1,734 ⟶ 2,046:
This algorithm creates a sieve of Eratosthenes, storing the largest prime factor to mark composites. It then finds prime factors by repeatedly looking up the value in the sieve, then dividing by the factor found until the value is itself prime. Using the sieve table to store factors rather than as a plain bitmap was to me a novel idea.
 
<syntaxhighlight lang="fortran">
<lang FORTRAN>
!-*- mode: compilation; default-directory: "/tmp/" -*-
!Compilation started at Thu Jun 6 23:29:06
Line 1,861 ⟶ 2,173:
call sieve(0) ! release memory
end program count_in_factors
</syntaxhighlight>
</lang>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Sub getPrimeFactors(factors() As UInteger, n As UInteger)
Line 1,901 ⟶ 2,213:
Print
Print "Press any key to quit"
Sleep</langsyntaxhighlight>
 
{{out}}
Line 1,929 ⟶ 2,241:
=={{header|Frink}}==
Frink's factoring routines work on arbitrarily-large integers.
<langsyntaxhighlight lang="frink">i = 1
while true
{
println[join[" x ", factorFlat[i]]]
i = i + 1
}</langsyntaxhighlight>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
local fn Factorial( num as long ) as CFStringRef
CFStringRef x, f, result
long fct
f = @"" : x = @""
if num = 1 then result = @" 1" : exit fn
fct = 2
while ( fct <= num )
if ( num mod fct == 0 )
f = fn StringWithFormat( @"%@%@%@", f, x, str( fct ) )
x = @" x"
num = num / fct
else
fct++
end if
wend
result = f
end fn = result
 
long i
for i = 1 to 20
printf @"%2ld =%@", i, fn Factorial(i)
next
 
HandleEvents
</syntaxhighlight>
{{output}}
<pre>
1 = 1
2 = 2
3 = 3
4 = 2 x 2
5 = 5
6 = 2 x 3
7 = 7
8 = 2 x 2 x 2
9 = 3 x 3
10 = 2 x 5
11 = 11
12 = 2 x 2 x 3
13 = 13
14 = 2 x 7
15 = 3 x 5
16 = 2 x 2 x 2 x 2
17 = 17
18 = 2 x 3 x 3
19 = 19
20 = 2 x 2 x 5
</pre>
 
 
=={{header|Fōrmulæ}}==
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/Count_in_factors}}
 
'''Solution'''
 
The '''Factor''' expression reduces to a list of the primer factors of a given number.
 
We cannot create the multiplication directly, because it would be reduced immediately to its value. We can make use of the reflection capabilities:
 
[[File:Fōrmulæ - Count in factors 01.png]]
 
[[File:Fōrmulæ - Count in factors 02.png]]
 
[[File:Fōrmulæ - Count in factors 03.png]]
 
[[File:Fōrmulæ - Count in factors 04.png]]
 
[[File:Fōrmulæ - Count in factors 05.png]]
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 1,955 ⟶ 2,340:
fmt.Println()
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,972 ⟶ 2,357:
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">def factors(number) {
if (number == 1) {
return [1]
Line 1,993 ⟶ 2,378:
((1..10) + (6351..6359)).each { number ->
println "$number = ${number.factors().join(' x ')}"
}</langsyntaxhighlight>
{{out}}
<pre>1 = 1
Line 2,017 ⟶ 2,402:
=={{header|Haskell}}==
Using <code>factorize</code> function from the [[Prime_decomposition#Haskell|prime decomposition]] task,
<langsyntaxhighlight lang="haskell">import Data.List (intercalate)
 
showFactors n = show n ++ " = " ++ (intercalate " * " . map show . factorize) n
-- Pointfree form
showFactors = ((++) . show) <*> ((" = " ++) . intercalate " * " . map show . factorize)</langsyntaxhighlight>
isPrime n = n > 1 && noDivsBy primeNums n
{{out}}
<small><langsyntaxhighlight lang="haskell">Main> print 1 >> mapM_ (putStrLn . showFactors) [2..]
1
2 = 2
Line 2,065 ⟶ 2,450:
121231231232164 = 2 * 2 * 253811 * 119410931
121231231232165 = 5 * 137 * 176979899609
. . .</langsyntaxhighlight></small>
The real solution seems to have to be some sort of a segmented offset sieve of Eratosthenes, storing factors in array's cells instead of just marks. That way the speed of production might not be diminishing as much.
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight Iconlang="icon">procedure main()
write("Press ^C to terminate")
every f := [i:= 1] | factors(i := seq(2)) do {
Line 2,077 ⟶ 2,462:
end
 
link factors</langsyntaxhighlight>
{{libheader|Icon Programming Library}}
[http://www.cs.arizona.edu/icon/library/src/procs/factors.icn factors.icn provides factors]
Line 2,100 ⟶ 2,485:
 
=={{header|IS-BASIC}}==
<langsyntaxhighlight ISlang="is-BASICbasic">100 PROGRAM "Factors.bas"
110 FOR I=1 TO 30
120 PRINT I;"= ";FACTORS$(I)
Line 2,120 ⟶ 2,505:
280 LET FACTORS$=F$(1:LEN(F$)-1)
290 END IF
300 END DEF</langsyntaxhighlight>
{{out}}
<pre> 1 = 1
Line 2,154 ⟶ 2,539:
 
=={{header|J}}==
'''Solution''':Use J's factoring primitive, <syntaxhighlight lang ="j">q:</langsyntaxhighlight>
'''Example''' (including formatting):<langsyntaxhighlight lang="j"> ('1 : 1',":&> ,"1 ': ',"1 ":@q:) 2+i.10
1 : 1
2 : 2
Line 2,166 ⟶ 2,551:
9 : 3 3
10: 2 5
11: 11</langsyntaxhighlight>
 
=={{header|Java}}==
{{trans|Visual Basic .NET}}
<langsyntaxhighlight lang="java">public class CountingInFactors{
public static void main(String[] args){
for(int i = 1; i<= 10; i++){
Line 2,210 ⟶ 2,595:
return n;
}
}</langsyntaxhighlight>
{{out}}
<pre>1 = 1
Line 2,234 ⟶ 2,619:
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">for(i = 1; i <= 10; i++)
console.log(i + " : " + factor(i).join(" x "));
 
Line 2,248 ⟶ 2,633:
}
return factors;
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,262 ⟶ 2,647:
10 : 2 x 5
</pre>
 
=={{header|jq}}==
{{works with|jq}}
'''Works with gojq, the Go implementation of jq'''
 
The following uses `factors/0`, a suitable implementation of which may be found at
[[Prime_decomposition#jq]].
 
gojq supports unlimited-precision integer arithmetic, but the C implementation of jq
currently uses IEEE 754 64-bit numbers, so using the latter, the following program will only be
reliable for integers up to and including 9,007,199,254,740,992 (2^53). However, "factors"
could be easily modified to work with a "BigInt" library for jq, such as [https://gist.github.com/pkoppstein/d06a123f30c033195841 BigInt.jq].
<syntaxhighlight lang="jq"># To take advantage of gojq's arbitrary-precision integer arithmetic:
def power($b): . as $in | reduce range(0;$b) as $i (1; . * $in);
 
# Input: a non-negative integer determining when to stop
def count_in_factors:
"1: 1",
(range(2;.) | "\(.): \([factors] | join("x"))");
 
def count_in_factors($m;$n):
if . == 1 then "1: 1" else empty end,
(range($m;$n) | "\(.): \([factors] | join("x"))");
</syntaxhighlight>
'''Examples'''
<syntaxhighlight lang="jq">
10 | count_in_factors,
"",
count_in_factors(2144; 2145),
"",
(2|power(100) | count_in_factors(.; .+ 2))</syntaxhighlight>
{{out}}
The output shown here is based on a run of gojq.
<pre>
1: 1
2: 2
3: 3
4: 2x2
5: 5
6: 2x3
7: 7
8: 2x2x2
9: 3x3
 
2144: 2x2x2x2x2x67
 
1267650600228229401496703205376: 2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2
1267650600228229401496703205377: 17x401x61681x340801x2787601x3173389601
</pre>
 
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">using Primes, Printf
function strfactor(n::Integer)
n > -2 || return "-1 × " * strfactor(-n)
Line 2,276 ⟶ 2,711:
for n in lo:hi
@printf("%5d = %s\n", n, strfactor(n))
end</langsyntaxhighlight>
 
{{out}}
Line 2,327 ⟶ 2,762:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.2
 
fun isPrime(n: Int) : Boolean {
Line 2,368 ⟶ 2,803:
for (i in list)
println("${"%4d".format(i)} = ${getPrimeFactors(i).joinToString(" * ")}")
}</langsyntaxhighlight>
 
{{out}}
Line 2,399 ⟶ 2,834:
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb">
<lang lb>
'see Run BASIC solution
for i = 1000 to 1016
Line 2,417 ⟶ 2,852:
end if
wend
end function </langsyntaxhighlight>
{{out}}
<pre>
Line 2,440 ⟶ 2,875:
 
=={{header|Lua}}==
<langsyntaxhighlight Lualang="lua">function factorize( n )
if n == 1 then return {1} end
 
Line 2,463 ⟶ 2,898:
end
print ""
end</langsyntaxhighlight>
 
=={{header|M2000 Interpreter}}==
Decompose function now return array (in number decomposition task return an inventory list).
 
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module Count_in_factors {
Inventory Known1=2@, 3@
Line 2,524 ⟶ 2,959:
}
Count_in_factors
</syntaxhighlight>
</lang>
 
=={{header|M4}}==
<langsyntaxhighlight M4lang="m4">define(`for',
`ifelse($#,0,``$0'',
`ifelse(eval($2<=$3),1,
Line 2,543 ⟶ 2,978:
 
for(`y',1,25,1, `wby(y)
')</langsyntaxhighlight>
 
{{out}}
Line 2,575 ⟶ 3,010:
 
=={{header|Maple}}==
<langsyntaxhighlight lang="maple">factorNum := proc(n)
local i, j, firstNum;
if n = 1 then
Line 2,598 ⟶ 3,033:
printf("%2a: ", i);
factorNum(i);
end do;</langsyntaxhighlight>
{{out}}
<pre>
Line 2,614 ⟶ 3,049:
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">n = 2;
While[n < 100,
Print[Row[Riffle[Flatten[Map[Apply[ConstantArray, #] &, FactorInteger[n]]],"*"]]];
n++]</langsyntaxhighlight>
 
=={{header|NetRexx}}==
{{trans|Java}}
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
options replace format comments java crossref symbols nobinary
 
Line 2,673 ⟶ 3,108:
end
return
</syntaxhighlight>
</lang>
{{out}}
<pre style="height: 30em;overflow: scroll; font-size: smaller;">
Line 2,751 ⟶ 3,186:
=={{header|Nim}}==
{{trans|C}}
<langsyntaxhighlight lang="nim">var primes = newSeq[int]()
 
proc getPrime(idx: int): int =
Line 2,789 ⟶ 3,224:
if first > 0: echo n
elif n > 1: echo " x ", n
else: echo ""</langsyntaxhighlight>
<pre>1 = 1
2 = 2
Line 2,807 ⟶ 3,242:
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">
class CountingInFactors {
function : Main(args : String[]) ~ Nil {
Line 2,861 ⟶ 3,296:
}
}
</syntaxhighlight>
</lang>
Output:
<pre>
Line 2,887 ⟶ 3,322:
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">open Big_int
 
let prime_decomposition x =
Line 2,908 ⟶ 3,343:
aux (succ_big_int v)
in
aux unit_big_int</langsyntaxhighlight>
{{out|Execution}}
<pre>$ ocamlopt -o count.opt nums.cmxa count.ml
Line 2,934 ⟶ 3,369:
=={{header|Octave}}==
Octave's factor function returns an array:
<langsyntaxhighlight lang="octave">for (n = 1:20)
printf ("%i: ", n)
printf ("%i ", factor (n))
printf ("\n")
endfor</langsyntaxhighlight>
{{out}}
<pre>1: 1
Line 2,962 ⟶ 3,397:
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">fnice(n)={
fnice(n)={
my(f,s="",s1);
if (n < 2, return(n));
Line 2,968 ⟶ 3,404:
s = Str(s, f[1,1]);
if (f[1, 2] != 1, s=Str(s, "^", f[1,2]));
for(i=2,#f[,1], s1 = Str(" * ", f[i, 1]); if (f[i, 2] != 1, s1 = Str(s1, "^", f[i, 2])); s = Str(s, s1));
for(i=2,#f[,1],
s
s1 = Str(" * ", f[i, 1]);
if (f[i, 2] != 1, s1 = Str(s1, "^", f[i, 2]));
s = Str(s, s1)
);
s
};
 
n=0;while(n++, print(fnice(n)))</lang>
n=0;while(n++<21, printf("%2s: %s\n",n,fnice(n)))
</syntaxhighlight>
 
{{out}}
<pre>
1: 1
2: 2
3: 3
4: 2^2
5: 5
6: 2 * 3
7: 7
8: 2^3
9: 3^2
10: 2 * 5
11: 11
12: 2^2 * 3
13: 13
14: 2 * 7
15: 3 * 5
16: 2^4
17: 17
18: 2 * 3^2
19: 19
20: 2^2 * 5
</pre>
 
=={{header|Pascal}}==
{{works with|Free_Pascal}}
<langsyntaxhighlight lang="pascal">program CountInFactors(output);
 
{$IFDEF FPC}
Line 3,027 ⟶ 3,485:
writeln;
end;
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 3,056 ⟶ 3,514:
=={{header|Perl}}==
Typically one would use a module for this. Note that these modules all return an empty list for '1'. This should be efficient to 50+ digits:{{libheader|ntheory}}
<langsyntaxhighlight lang="perl">use ntheory qw/factor/;
print "$_ = ", join(" x ", factor($_)), "\n" for 1000000000000000000 .. 1000000000000000010;</langsyntaxhighlight>
{{out}}
<pre>1000000000000000000 = 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5
Line 3,072 ⟶ 3,530:
 
Giving similar output and also good for large inputs:
<langsyntaxhighlight lang="perl">use Math::Pari qw/factorint/;
sub factor {
my ($pn,$pc) = @{Math::Pari::factorint(shift)};
return map { ($pn->[$_]) x $pc->[$_] } 0 .. $#$pn;
}
print "$_ = ", join(" x ", factor($_)), "\n" for 1000000000000000000 .. 1000000000000000010;</langsyntaxhighlight>
 
or, somewhat slower and limited to native 32-bit or 64-bit integers only:
<langsyntaxhighlight lang="perl">use Math::Factor::XS qw/prime_factors/;
print "$_ = ", join(" x ", prime_factors($_)), "\n" for 1000000000000000000 .. 1000000000000000010;</langsyntaxhighlight>
 
 
If we want to implement it self-contained, we could use the prime decomposition routine from the [[Prime_decomposition]] task. This is reasonably fast and small, though much slower than the modules and certainly could have more optimization.
<langsyntaxhighlight lang="perl">sub factors {
my($n, $p, @out) = (shift, 3);
return if $n < 1;
Line 3,100 ⟶ 3,558:
}
 
print "$_ = ", join(" x ", factors($_)), "\n" for 100000000000 .. 100000000100;</langsyntaxhighlight>
 
We could use the second extensible sieve from [[Sieve_of_Eratosthenes#Extensible_sieves]] to only divide by primes.
<langsyntaxhighlight lang="perl">tie my @primes, 'Tie::SieveOfEratosthenes';
 
sub factors {
Line 3,118 ⟶ 3,576:
}
 
print "$_ = ", join(" x ", factors($_)), "\n" for 100000000000 .. 100000000010;</langsyntaxhighlight>
{{out}}
<pre>100000000000 = 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5 x 5
Line 3,133 ⟶ 3,591:
 
This next example isn't quite as fast and uses much more memory, but it is self-contained and shows a different approach. As written it must start at 1, but a range can be handled by using a <code>map</code> to prefill the <tt>p_and_sq</tt> array.
<langsyntaxhighlight lang="perl">#!perl -C
use utf8;
use strict;
Line 3,164 ⟶ 3,622:
}
die "Ran out of primes?!";
}</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>requires("0.8.2") -- (for [p]apply)
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
 
<span style="color: #008080;">procedure</span> <span style="color: #000000;">factorise</span><span style="color: #0000FF;">(</span><span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
procedure factorise(integer n)
<span style="color: #004080;">sequence</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">prime_factors</span><span style="color: #0000FF;">(</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
sequence res = prime_factors(n,true)
<span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">apply</span><span style="color: #0000FF;">(</span><span style="color: #000000;">res</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprint</span><span style="color: #0000FF;">),</span><span style="color: #008000;">" x "</span><span style="color: #0000FF;">)</span>
res = join(apply(res,sprint)," x ")
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%2d: %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">n</span><span style="color: #0000FF;">,</span><span style="color: #000000;">res</span><span style="color: #0000FF;">})</span>
printf(1,"%2d: %s\n",{n,res})
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
end procedure
<span style="color: #7060A8;">papply</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">10</span><span style="color: #0000FF;">)&{</span><span style="color: #000000;">2144</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1000000000</span><span style="color: #0000FF;">},</span><span style="color: #000000;">factorise</span><span style="color: #0000FF;">)</span>
papply(tagset(10)&{2144,1000000000},factorise)</lang>
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 3,194 ⟶ 3,653:
=={{header|PicoLisp}}==
This is the 'factor' function from [[Prime decomposition#PicoLisp]].
<langsyntaxhighlight PicoLisplang="picolisp">(de factor (N)
(make
(let (D 2 L (1 2 2 . (4 2 4 2 4 6 2 6 .)) M (sqrt N))
Line 3,204 ⟶ 3,663:
 
(for N 20
(prinl N ": " (glue " * " (factor N))) )</langsyntaxhighlight>
{{out}}
<pre>1: 1
Line 3,228 ⟶ 3,687:
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>
cnt: procedure options (main);
declare (i, k, n) fixed binary;
Line 3,253 ⟶ 3,712:
end;
end cnt;
</syntaxhighlight>
</lang>
Results:
<pre> 1 = 1
Line 3,298 ⟶ 3,757:
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang PowerShell>
function eratosthenes ($n) {
if($n -ge 1){
Line 3,331 ⟶ 3,790:
"$(prime-decomposition 100)"
"$(prime-decomposition 12)"
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
Line 3,340 ⟶ 3,799:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Procedure Factorize(Number, List Factors())
Protected I = 3, Max
ClearList(Factors())
Line 3,377 ⟶ 3,836:
PrintN(text$)
Next a
EndIf</langsyntaxhighlight>
{{out}}
<pre> 1= 1
Line 3,402 ⟶ 3,861:
=={{header|Python}}==
This uses the [http://docs.python.org/dev/library/functools.html#functools.lru_cache functools.lru_cache] standard library module to cache intermediate results.
<langsyntaxhighlight lang="python">from functools import lru_cache
 
primes = [2, 3, 5, 7, 11, 13, 17] # Will be extended
Line 3,436 ⟶ 3,895:
print('\nNumber of primes gathered up to', n, 'is', len(primes))
print(pfactor.cache_info())</langsyntaxhighlight>
{{out}}
<pre> 1 1
Line 3,479 ⟶ 3,938:
Reusing the code from [http://rosettacode.org/wiki/Prime_decomposition#Quackery Prime Decomposition].
 
<langsyntaxhighlight Quackerylang="quackery"> [ [] swap
dup times
[ [ dup i^ 2 + /mod
Line 3,497 ⟶ 3,956:
cr again ] ] is countinfactors ( --> )
 
countinfactors</langsyntaxhighlight>
 
{{out}}
Line 3,527 ⟶ 3,986:
 
=={{header|R}}==
<syntaxhighlight lang="r">
<lang R>
#initially I created a function which returns prime factors then I have created another function counts in the factors and #prints the values.
 
Line 3,554 ⟶ 4,013:
}
count_in_factors(72)
</syntaxhighlight>
</lang>
 
{{out}}
Line 3,564 ⟶ 4,023:
See also [[#Scheme]]. This uses Racket&rsquo;s <code>math/number-theory</code> package
 
<langsyntaxhighlight lang="racket">#lang typed/racket
 
(require math/number-theory)
Line 3,585 ⟶ 4,044:
(factor-count 1 22)
(factor-count 2140 2150)
; tb</langsyntaxhighlight>
 
{{out}}
Line 3,626 ⟶ 4,085:
(formerly Perl 6)
{{works with|rakudo|2015-10-01}}
<syntaxhighlight lang="raku" perl6line>constant @primes = 2, |(3, 5, 7 ... *).grep: *.is-prime;
 
multi factors(1) { 1 }
Line 3,646 ⟶ 4,105:
}
 
say "$_: ", factors($_).join(" × ") for 1..*;</langsyntaxhighlight>
The first twenty numbers:
<pre>1: 1
Line 3,674 ⟶ 4,133:
Here is a solution inspired from [[Almost_prime#C]]. It doesn't use &is-prime.
 
<syntaxhighlight lang="raku" perl6line>sub factor($n is copy) {
$n == 1 ?? 1 !!
gather {
Line 3,686 ⟶ 4,145:
}
 
say "$_ == ", join " \x00d7 ", factor $_ for 1 .. 20;</langsyntaxhighlight>
 
Same output as above.
Line 3,693 ⟶ 4,152:
Alternately, use a module:
 
<syntaxhighlight lang="raku" perl6line>use Prime::Factor;
 
say "$_ = {(.&prime-factors || 1).join: ' x ' }" for flat 1 .. 10, 10**20 .. 10**20 + 10;</langsyntaxhighlight>
{{out}}
<pre>1 = 1
Line 3,718 ⟶ 4,177:
100000000000000000009 = 557 x 72937 x 2461483384901
100000000000000000010 = 2 x 5 x 11 x 909090909090909091</pre>
 
=={{header|Refal}}==
<syntaxhighlight language="refal">$ENTRY Go {
= <Each Show <Iota 1 15> 2144>;
};
 
Factorize {
1 = 1;
s.N = <Factorize 2 s.N>;
s.D s.N, <Compare s.N s.D>: '-' = ;
s.D s.N, <Divmod s.N s.D>: {
(s.R) 0 = s.D <Factorize s.D s.R>;
e.X = <Factorize <+ 1 s.D> s.N>;
};
};
 
Join {
(e.J) = ;
(e.J) s.N = <Symb s.N>;
(e.J) s.N e.X = <Symb s.N> e.J <Join (e.J) e.X>;
};
 
Iota {
s.End s.End = s.End;
s.Start s.End = s.Start <Iota <+ s.Start 1> s.End>;
};
 
Each {
s.F = ;
s.F t.I e.X = <Mu s.F t.I> <Each s.F e.X>;
};
 
Show {
e.N = <Prout <Symb e.N> ' = ' <Join (' x ') <Factorize e.N>>>;
}; </syntaxhighlight>
{{out}}
<pre>1 = 1
2 = 2
3 = 3
4 = 2 x 2
5 = 5
6 = 2 x 3
7 = 7
8 = 2 x 2 x 2
9 = 3 x 3
10 = 2 x 5
11 = 11
12 = 2 x 2 x 3
13 = 13
14 = 2 x 7
15 = 3 x 5
2144 = 2 x 2 x 2 x 2 x 2 x 67</pre>
 
=={{header|REXX}}==
Line 3,727 ⟶ 4,238:
<br>prime factors are listed, but the number of primes found is always shown. &nbsp; The showing of the count of
<br>primes was included to help verify the factoring (of composites).
<langsyntaxhighlight lang="rexx">/*REXX program lists the prime factors of a specified integer (or a range of integers).*/
@.=left('', 8); @.0="{unity} "; @.1='[prime] ' /*some tags and handy-dandy literals.*/
parse arg LO HI @ . /*get optional arguments from the C.L. */
Line 3,763 ⟶ 4,274:
end /*j*/
if z==1 then return substr($, 1+length(@) ) /*Is residual=1? Don't add 1*/
return substr($||@||z, 1+length(@) ) /*elide superfluous header. */</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default inputs:}}
<pre>
Line 3,842 ⟶ 4,353:
 
Note that the &nbsp; '''integer square root''' &nbsp; section of code doesn't use any floating point numbers, just integers.
<langsyntaxhighlight lang="rexx">/*REXX program lists the prime factors of a specified integer (or a range of integers).*/
@.=left('', 8); @.0="{unity} "; @.1='[prime] ' /*some tags and handy-dandy literals.*/
parse arg LO HI @ . /*get optional arguments from the C.L. */
Line 3,892 ⟶ 4,403:
 
if z==1 then return substr($, 1+length(@) ) /*Is residual=1? Don't add 1*/
return substr($||@||z, 1+length(@) ) /*elide superfluous header. */</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default inputs:}}
<pre>
Line 3,940 ⟶ 4,451:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
for i = 1 to 20
see "" + i + " = " + factors(i) + nl
Line 3,956 ⟶ 4,467:
end
return left(f, len(f) - 3)
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,979 ⟶ 4,490:
19 = 19
20 = 2 x 2 x 5
</pre>
 
=={{header|RPL}}==
<code>PDIV</code> is defined at [[Prime decomposition#RPL|Prime decomposition]]
≪ { "1" } 2 ROT '''FOR''' j
"" j <span style="color:blue">PDIV</span> → factors
≪ '''IF''' factors SIZE 1 == '''THEN''' j →STR +
'''ELSE'''
1 factors SIZE '''FOR''' k
'''IF''' k 1 ≠ '''THEN''' 130 CHR + '''END'''
factors k GET →STR +
'''NEXT END'''
≫ + '''NEXT'''
≫ '<span style="color:blue">TASK</span>' STO
 
20 <span style="color:blue">TASK</span>
{{out}}
<pre>
1: { "1" "2" "3" "2×2" "5" "2×3" "7" "2×2×2" "3×3" "2×5" "11" "2×2×3" "13" "2×7" "3×5" "2×2×2×2" "17" "2×3×3" "19" "2×2×5" }
</pre>
 
=={{header|Ruby}}==
Starting with Ruby 1.9, 'prime' is part of the standard library and provides Integer#prime_division.
<langsyntaxhighlight lang="ruby">require 'optparse'
require 'prime'
 
Line 4,005 ⟶ 4,535:
end.join " x "
puts "#{i} is #{f}"
end</langsyntaxhighlight>
{{out|Example}}
<pre>$ ruby prime-count.rb -h
Line 4,033 ⟶ 4,563:
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">for i = 1000 to 1016
print i;" = "; factorial$(i)
next
Line 4,049 ⟶ 4,579:
end if
wend
end function</langsyntaxhighlight>
{{out}}
<pre>1000 = 2 x 2 x 2 x 5 x 5 x 5
Line 4,071 ⟶ 4,601:
=={{header|Rust}}==
You can run and experiment with this code at https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b66c14d944ff0472d2460796513929e2
<langsyntaxhighlight lang="rust">use std::env;
 
fn main() {
Line 4,111 ⟶ 4,641:
}
vec![n]
}</langsyntaxhighlight>
{{out}}
<pre>1
Line 4,136 ⟶ 4,666:
 
=={{header|Sage}}==
<langsyntaxhighlight lang="python">def count_in_factors(n):
if is_prime(n) or n == 1:
print(n,end="")
Line 4,151 ⟶ 4,681:
print(i,"=",end=" ")
count_in_factors(i)
print("")</langsyntaxhighlight>
 
{{out}}
Line 4,215 ⟶ 4,745:
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">
object CountInFactors extends App {
 
Line 4,243 ⟶ 4,773:
 
}
</syntaxhighlight>
</lang>
{{out}}
<pre> 1 : 1
Line 4,261 ⟶ 4,791:
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="lisp">(define (factors n)
(let facs ((l '()) (d 2) (x n))
(cond ((= x 1) (if (null? l) '(1) l))
Line 4,280 ⟶ 4,810:
(display i)
(display " = ")
(show (reverse (factors i))))</langsyntaxhighlight>
{{out}}
<pre>1 = 1
Line 4,297 ⟶ 4,827:
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const proc: writePrimeFactors (in var integer: number) is func
Line 4,335 ⟶ 4,865:
writeln;
end for;
end func;</langsyntaxhighlight>
{{out}}
<pre>
Line 4,357 ⟶ 4,887:
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">class Counter {
method factors(n, p=2) {
var a = gather {
Line 4,385 ⟶ 4,915:
for i in (1..100) {
say "#{i} = #{Counter().factors(i).join(' × ')}"
}</langsyntaxhighlight>
 
=={{header|Swift}}==
 
<langsyntaxhighlight lang="swift">extension BinaryInteger {
@inlinable
public func primeDecomposition() -> [Self] {
Line 4,417 ⟶ 4,947:
print("\(i) = \(i.primeDecomposition().map(String.init).joined(separator: " x "))")
}
}</langsyntaxhighlight>
 
{{out}}
Line 4,444 ⟶ 4,974:
=={{header|Tcl}}==
This factorization code is based on the same engine that is used in the [[Parallel calculations#Tcl|parallel computation task]].
<langsyntaxhighlight lang="tcl">package require Tcl 8.5
 
namespace eval prime {
Line 4,505 ⟶ 5,035:
return [join $v "*"]
}
}</langsyntaxhighlight>
Demonstration code:
<langsyntaxhighlight lang="tcl">set max 20
for {set i 1} {$i <= $max} {incr i} {
puts [format "%*d = %s" [string length $max] $i [prime::factors.rendered $i]]
}</langsyntaxhighlight>
 
=={{header|VBScript}}==
Made minor modifications on the code I posted under Prime Decomposition.
<langsyntaxhighlight lang="vb">Function CountFactors(n)
If n = 1 Then
CountFactors = 1
Line 4,572 ⟶ 5,102:
WScript.StdOut.WriteLine
WScript.StdOut.Write "2144 = " & CountFactors(2144)
WScript.StdOut.WriteLine</langsyntaxhighlight>
 
{{Out}}
Line 4,581 ⟶ 5,111:
 
=={{header|Visual Basic .NET}}==
<langsyntaxhighlight lang="vbnet">Module CountingInFactors
 
Sub Main()
Line 4,622 ⟶ 5,152:
End Sub
 
End Module</langsyntaxhighlight>
{{out}}
<pre>
Line 4,647 ⟶ 5,177:
</pre>
 
=={{header|XPL0V (Vlang)}}==
{{trans|go}}
<lang XPL0>include c:\cxpl\codes;
<syntaxhighlight lang="v (vlang)">fn main() {
int N0, N, F;
println("1: 1")
[N0:= 1;
for i := 2; ; i++ {
repeat IntOut(0, N0); Text(0, " = ");
Fprint("$i:= 2; N:= N0;")
repeatmut x if rem(N/F) := 0 then''
for n, f := i, 2; n != 1; f++ [if N # N0 then Text(0, " * ");{
for m := n % f; m == 0; m = n IntOut(0,% F);f {
N:= N/F;print('$x$f')
x = ]"×"
elsen F:/= F+1;f
until F>N; }
}
if N0=1 then IntOut(0, 1); \1 = 1
CrLfprintln(0'');
N0:= N0+1;}
}</syntaxhighlight>
until KeyHit;
{{out}}
]</lang>
 
Example output:
<pre>
1 =: 1
2 =: 2
3 =: 3
4: 2×2
4 = 2 * 2
5 =: 5
6: 2×3
6 = 2 * 3
7 =: 7
8: 2×2×2
8 = 2 * 2 * 2
9: 3×3
9 = 3 * 3
10: = 2 * 52×5
...
11 = 11
12 = 2 * 2 * 3
13 = 13
14 = 2 * 7
15 = 3 * 5
16 = 2 * 2 * 2 * 2
17 = 17
18 = 2 * 3 * 3
. . .
57086 = 2 * 17 * 23 * 73
57087 = 3 * 3 * 6343
57088 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 223
57089 = 57089
57090 = 2 * 3 * 5 * 11 * 173
57091 = 37 * 1543
57092 = 2 * 2 * 7 * 2039
57093 = 3 * 19031
57094 = 2 * 28547
57095 = 5 * 19 * 601
57096 = 2 * 2 * 2 * 3 * 3 * 13 * 61
57097 = 57097
</pre>
 
=={{header|Wren}}==
{{libheader|Wren-math}}
<langsyntaxhighlight ecmascriptlang="wren">import "./math" for Int
 
for (r in [1..9, 2144..2154, 9987..9999]) {
Line 4,711 ⟶ 5,219:
}
System.print()
}</langsyntaxhighlight>
 
{{out}}
Line 4,750 ⟶ 5,258:
9998: 2 x 4999
9999: 3 x 3 x 11 x 101
</pre>
 
=={{header|XPL0}}==
<syntaxhighlight lang="xpl0">include c:\cxpl\codes;
int N0, N, F;
[N0:= 1;
repeat IntOut(0, N0); Text(0, " = ");
F:= 2; N:= N0;
repeat if rem(N/F) = 0 then
[if N # N0 then Text(0, " * ");
IntOut(0, F);
N:= N/F;
]
else F:= F+1;
until F>N;
if N0=1 then IntOut(0, 1); \1 = 1
CrLf(0);
N0:= N0+1;
until KeyHit;
]</syntaxhighlight>
 
Example output:
<pre>
1 = 1
2 = 2
3 = 3
4 = 2 * 2
5 = 5
6 = 2 * 3
7 = 7
8 = 2 * 2 * 2
9 = 3 * 3
10 = 2 * 5
11 = 11
12 = 2 * 2 * 3
13 = 13
14 = 2 * 7
15 = 3 * 5
16 = 2 * 2 * 2 * 2
17 = 17
18 = 2 * 3 * 3
. . .
57086 = 2 * 17 * 23 * 73
57087 = 3 * 3 * 6343
57088 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 223
57089 = 57089
57090 = 2 * 3 * 5 * 11 * 173
57091 = 37 * 1543
57092 = 2 * 2 * 7 * 2039
57093 = 3 * 19031
57094 = 2 * 28547
57095 = 5 * 19 * 601
57096 = 2 * 2 * 2 * 3 * 3 * 13 * 61
57097 = 57097
</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">foreach n in ([1..*]){ println(n,": ",primeFactors(n).concat("\U2715;")) }</langsyntaxhighlight>
Using the fixed size integer (64 bit) solution from [[Prime decomposition#zkl]]
<langsyntaxhighlight lang="zkl">fcn primeFactors(n){ // Return a list of factors of n
acc:=fcn(n,k,acc,maxD){ // k is 2,3,5,7,9,... not optimum
if(n==1 or k>maxD) acc.close();
Line 4,767 ⟶ 5,329:
if(n!=m) acc.append(n/m); // opps, missed last factor
else acc;
}</langsyntaxhighlight>
{{out}}
<pre>
Line 4,786 ⟶ 5,348:
=={{header|ZX Spectrum Basic}}==
{{trans|BBC_BASIC}}
<langsyntaxhighlight lang="zxbasic">10 FOR i=1 TO 20
20 PRINT i;" = ";
30 IF i=1 THEN PRINT 1: GO TO 90
Line 4,796 ⟶ 5,358:
90 NEXT i
100 STOP
110 DEF FN m(a,b)=a-INT (a/b)*b</langsyntaxhighlight>
2,093

edits