Anonymous user
Count in factors: Difference between revisions
m
→{{header|REXX}}: added CLI support for specifying the "x" in the output (the multiplier characters), used a template for the output sedtions.
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Alternately, use a module) |
m (→{{header|REXX}}: added CLI support for specifying the "x" in the output (the multiplier characters), used a template for the output sedtions.) |
||
Line 3,256:
<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
if
if
HI= abs(HI) /*use the absolute value for HIGH. */
w= length(HI) /*get maximum width for pretty output. */
numeric digits max(9, w + 1) /*maybe bump the precision of numbers. */
#= 0 /*the number of primes found (so far). */
do n=abs(
p= words( translate(f, ,
if p==1 then #= # + 1 /*bump the primes counter (exclude N=1)*/
if tell then say right(n, w) '=' @.p f /*display if a prime, plus its factors.*/
end /*n*/
say
say right(#, w)
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
factr: procedure
do while z//2==0; $= $
do while z//3==0; $= $
do while z//5==0; $= $
do while z//7==0; $= $
do j=11 by 6 while j<=z /*insure that J isn't divisible by 3.*/
parse var j '' -1 _ /*get the last decimal digit of J. */
if _\==5 then do while z//j==0; $=$
if _ ==3 then iterate /*Next # ÷ by 5? Skip. ___ */
if j*j>n then leave /*are we higher than the √ N ? */
y= j + 2 /*obtain the next odd divisor. */
do while z//y==0; $=$
end /*j*/
if z==1 then return substr($, 1+length(@) ) /*Is residual=1? Don't add 1*/
{{out|output|text= when using the default inputs:}}
<pre>
Line 3,335 ⟶ 3,336:
12 primes found.
</pre>
<pre>
1 = {unity} 1
2 = [prime] 2
3 = [prime] 3
4 = 2 x 2
5 = [prime] 5
6 = 2 x 3
7 = [prime] 7
8 = 2 x 2 x 2
9 = 3 x 3
10 = 2 x 5
11 = [prime] 11
12 = 2 x 2 x 3
5 primes found.
</pre>
{{out|output|text= when the following input was used: <tt> 1 -10000 </tt>
<pre>
1229 primes found.
</pre>
<pre>
9592 primes found.
Line 3,353 ⟶ 3,371:
<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
if
if
HI= abs(HI) /*use the absolute value for HIGH. */
w= length(HI) /*get maximum width for pretty output. */
numeric digits max(9, w + 1) /*maybe bump the precision of numbers. */
#= 0 /*the number of primes found (so far). */
do n=abs(
p= words( translate(f, ,
if p==1 then #= # + 1 /*bump the primes counter (exclude N=1)*/
if tell then say right(n, w) '=' @.p f /*display if a prime, plus its factors.*/
end /*n*/
say
say right(#, w)
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
factr: procedure expose @; parse arg z 1 n,$;
do while z// 2==0;
do while z// 3==0;
do while z// 5==0;
do while z// 7==0;
do while z//11==0;
do while z//13==0;
do while z//17==0;
do while z//19==0;
do while z//23==0;
do while z//29==0;
do while z//31==0;
do while z//37==0;
if z>40 then do; t= z; q= 1; r= 0; do while q<=t; q= q * 4
end /*while*/
do while q>1; q=q%4; _=t-r-q; r=r%2; if _>=0 then do; t=_; r=r+q
end
Line 3,390 ⟶ 3,411:
do j=41 by 6 to r while j<=z /*insure J isn't divisible by 3*/
parse var j '' -1 _ /*get last decimal digit of J.*/
if _\==5 then do while z//j==0; $=$
if _ ==3 then iterate /*Next number ÷ by 5 ? Skip.*/
y= j + 2 /*use the next (odd) divisor. */
do while z//y==0; $=$
end /*j*/ /* [↑] reduce Z by Y ? */
end /*if z>40*/
if z==1 then return
return
{{out|output|text=
<pre>
1 = {unity} 1
2 = [prime] 2
3 = [prime] 3
4 = 2∙2
5 = [prime] 5
6 = 2∙3
7 = [prime] 7
8 = 2∙2∙2
9 = 3∙3
10 = 2∙5
11 = [prime] 11
12 = 2∙2∙3
13 = [prime] 13
14 = 2∙7
15 = 3∙5
16 = 2∙2∙2∙2
17 = [prime] 17
18 = 2∙3∙3
19 = [prime] 19
20 = 2∙2∙5
21 = 3∙7
22 = 2∙11
23 = [prime] 23
24 = 2∙2∙2∙3
25 = 5∙5
26 = 2∙13
27 = 3∙3∙3
28 = 2∙2∙7
29 = [prime] 29
30 = 2∙3∙5
31 = [prime] 31
32 = 2∙2∙2∙2∙2
33 = 3∙11
34 = 2∙17
35 = 5∙7
36 = 2∙2∙3∙3
37 = [prime] 37
38 = 2∙19
39 = 3∙13
40 = 2∙2∙2∙5
12 primes found.
</pre>
=={{header|Ring}}==
|