Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
44
Task/Multi-base-primes/REXX/multi-base-primes.rexx
Normal file
44
Task/Multi-base-primes/REXX/multi-base-primes.rexx
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/*REXX pgm finds primes whose values in other bases (2──►36) have the most diff. bases. */
|
||||
parse arg widths . /*obtain optional argument from the CL.*/
|
||||
if widths=='' | widths=="," then widths= 5 /*Not specified? Then use the default.*/
|
||||
call genP /*build array of semaphores for primes.*/
|
||||
names= 'one two three four five six seven eight' /*names for some low decimal numbers. */
|
||||
$.=
|
||||
do j=1 for # /*only use primes that are within range*/
|
||||
do b=36 by -1 for 35; n= base(@.j, b) /*use different bases for each prime. */
|
||||
L= length(n); if L>widths then iterate /*obtain length; Length too big? Skip.*/
|
||||
if L==1 then $.L.n= b $.L.n /*Length = unity? Prepend the base.*/
|
||||
else $.L.n= $.L.n b /* " ¬= " Append " " */
|
||||
end /*b*/
|
||||
end /*j*/
|
||||
/*display info for each of the widths. */
|
||||
do w=1 for widths; cnt= 0 /*show for each width: cnt,number,bases*/
|
||||
bot= left(1, w, 0); top= left(9, w, 9) /*calculate range for DO. */
|
||||
do n=bot to top; y= words($.w.n) /*find the sets of numbers for a width.*/
|
||||
if y>cnt then do; mxn=n; cnt= max(cnt, y); end /*found a max? Remember it*/
|
||||
end /*n*/
|
||||
say
|
||||
say; say center(' 'word(names, w)"─character numbers that are" ,
|
||||
'prime in the most bases: ('cnt "bases) ", 101, '─')
|
||||
do n=bot to top; y= words($.w.n) /*search again for maximums.*/
|
||||
if y==cnt then say n '──►' strip($.w.n) /*display ───a─── maximum. */
|
||||
end /*n*/
|
||||
end /*w*/
|
||||
exit 0 /*stick a fork in it, we're all done. */
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
base: procedure; parse arg x,r,,z; @= '0123456789abcdefghijklmnopqrsruvwxyz'
|
||||
do j=1; _= r**j; if _>x then leave
|
||||
end /*j*/
|
||||
do k=j-1 to 1 by -1; _= r**k; z= z || substr(@, (x % _) + 1, 1); x= x // _
|
||||
end /*k*/; return z || substr(@, x+1, 1)
|
||||
/*──────────────────────────────────────────────────────────────────────────────────────*/
|
||||
genP: @.1=2; @.2=3; @.3=5; @.4=7; @.5=11 /*define some low primes. */
|
||||
#= 5; sq.#= @.# ** 2 /*number primes so far; prime squared.*/
|
||||
do j=@.#+2 by 2 to 2 * 36 * 10**widths /*find odd primes from here on. */
|
||||
parse var j '' -1 _; if _==5 then iterate /*J is ÷ by 5? (right dig).*/
|
||||
if j//3==0 then iterate; if j//7==0 then iterate /*" " " " 3?; ÷ by 7? */
|
||||
do k=5 while sq.k<=j /* [↓] divide by the known odd primes.*/
|
||||
if j//@.k==0 then iterate j /*Is J ÷ X? Then not prime. ___ */
|
||||
end /*k*/ /* [↑] only process numbers ≤ √ J */
|
||||
#= # + 1; @.#= j; sq.#= j*j /*bump # Ps; assign next P; P squared.*/
|
||||
end /*j*/; return
|
||||
Loading…
Add table
Add a link
Reference in a new issue