Tau number: Difference between revisions
(elided the REXX entry, wrong task.) |
(→{{header|REXX}}: added the computer programming language REXX.) |
||
Line 12: | Line 12: | ||
* [[Tau function]] |
* [[Tau function]] |
||
<br><br> |
<br><br> |
||
=={{header|REXX}}== |
|||
<lang rexx>/*REXX program displays the first N tau numbers (an integer divisible by its tau number)*/ |
|||
parse arg n . /*obtain optional argument from the CL.*/ |
|||
if n=='' | n=="," then n= 100 /*Not specified? Then use the default.*/ |
|||
say 'The first ' n " tau numbers:"; say /*display what the output being shown. */ |
|||
say '─index─' center(" tau numbers ", 70, '─') /*display a title for the tau numbers. */ |
|||
w= max(7, length(n) ) /*W: used to align 1st output column. */ |
|||
$= /*$: the output list, shown ten/line. */ |
|||
#= 0 /*#: the count of tau numbers so far. */ |
|||
do j=1 until #==n /*search for N tau numbers */ |
|||
if j//tau(j) \==0 then iterate /*Is this a tau number? No, then skip.*/ |
|||
#= # + 1 /*bump the count of tau numbers found. */ |
|||
$= $ || right( commas(j), 7) /*add a tau number to the output list. */ |
|||
if #//10\==0 then iterate /*Not a multiple of 10? Don't display.*/ |
|||
say right(commas(#-9), 6)' ' $ /*display partial list to the terminal.*/ |
|||
$= /*start with a blank line for next line*/ |
|||
end /*j*/ |
|||
if $\=='' then say center(#//10, 7) $ /*any residuals tau #s left to display?*/ |
|||
exit 0 /*stick a fork in it, we're all done. */ |
|||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
commas: parse arg ?; do jc=length(?)-3 to 1 by -3; ?=insert(',', ?, jc); end; return ? |
|||
/*──────────────────────────────────────────────────────────────────────────────────────*/ |
|||
tau: procedure; parse arg x 1 y /*X and $ are both set from the arg.*/ |
|||
if x<6 then return 2 + (x==4) - (x==1) /*some low #s should be handled special*/ |
|||
odd= x // 2 /*check if X is odd (remainder of 1).*/ |
|||
if odd then do; #= 2; end /*Odd? Assume divisor count of 2. */ |
|||
else do; #= 4; y= x % 2; end /*Even? " " " " 4. */ |
|||
/* [↑] start with known number of divs*/ |
|||
do j=3 for x%2-3 by 1+odd while j<y /*for odd number, skip even numbers. */ |
|||
if x//j==0 then do /*if no remainder, then found a divisor*/ |
|||
#= # + 2; y= x % j /*bump # of divisors; calculate limit.*/ |
|||
if j>=y then do; #= # - 1; leave; end /*reached limit?*/ |
|||
end /* ___ */ |
|||
else if j*j>x then leave /*only divide up to √ x */ |
|||
end /*j*/ /* [↑] this form of DO loop is faster.*/ |
|||
return #</lang> |
|||
{{out|output|text= when using the default input:}} |
|||
<pre> |
|||
The first 100 tau numbers: |
|||
─index─ ──────────────────────────── tau numbers ───────────────────────────── |
|||
1 1 2 8 9 12 18 24 36 40 56 |
|||
11 60 72 80 84 88 96 104 108 128 132 |
|||
21 136 152 156 180 184 204 225 228 232 240 |
|||
31 248 252 276 288 296 328 344 348 360 372 |
|||
41 376 384 396 424 441 444 448 450 468 472 |
|||
51 480 488 492 504 516 536 560 564 568 584 |
|||
61 600 612 625 632 636 640 664 672 684 708 |
|||
71 712 720 732 776 792 804 808 824 828 852 |
|||
81 856 864 872 876 880 882 896 904 936 948 |
|||
91 972 996 1,016 1,040 1,044 1,048 1,056 1,068 1,089 1,096 |
|||
</pre> |
Revision as of 16:30, 20 December 2020
A Tau number is a positive integer divisible by the count of its positive divisors.
- Task
Show the first 100 Tau numbers.
- Related task
REXX
<lang rexx>/*REXX program displays the first N tau numbers (an integer divisible by its tau number)*/ parse arg n . /*obtain optional argument from the CL.*/ if n== | n=="," then n= 100 /*Not specified? Then use the default.*/ say 'The first ' n " tau numbers:"; say /*display what the output being shown. */ say '─index─' center(" tau numbers ", 70, '─') /*display a title for the tau numbers. */ w= max(7, length(n) ) /*W: used to align 1st output column. */ $= /*$: the output list, shown ten/line. */
#= 0 /*#: the count of tau numbers so far. */ do j=1 until #==n /*search for N tau numbers */ if j//tau(j) \==0 then iterate /*Is this a tau number? No, then skip.*/ #= # + 1 /*bump the count of tau numbers found. */ $= $ || right( commas(j), 7) /*add a tau number to the output list. */ if #//10\==0 then iterate /*Not a multiple of 10? Don't display.*/ say right(commas(#-9), 6)' ' $ /*display partial list to the terminal.*/ $= /*start with a blank line for next line*/ end /*j*/
if $\== then say center(#//10, 7) $ /*any residuals tau #s left to display?*/ exit 0 /*stick a fork in it, we're all done. */ /*──────────────────────────────────────────────────────────────────────────────────────*/ commas: parse arg ?; do jc=length(?)-3 to 1 by -3; ?=insert(',', ?, jc); end; return ? /*──────────────────────────────────────────────────────────────────────────────────────*/ tau: procedure; parse arg x 1 y /*X and $ are both set from the arg.*/
if x<6 then return 2 + (x==4) - (x==1) /*some low #s should be handled special*/ odd= x // 2 /*check if X is odd (remainder of 1).*/ if odd then do; #= 2; end /*Odd? Assume divisor count of 2. */ else do; #= 4; y= x % 2; end /*Even? " " " " 4. */ /* [↑] start with known number of divs*/ do j=3 for x%2-3 by 1+odd while j<y /*for odd number, skip even numbers. */ if x//j==0 then do /*if no remainder, then found a divisor*/ #= # + 2; y= x % j /*bump # of divisors; calculate limit.*/ if j>=y then do; #= # - 1; leave; end /*reached limit?*/ end /* ___ */ else if j*j>x then leave /*only divide up to √ x */ end /*j*/ /* [↑] this form of DO loop is faster.*/ return #</lang>
- output when using the default input:
The first 100 tau numbers: ─index─ ──────────────────────────── tau numbers ───────────────────────────── 1 1 2 8 9 12 18 24 36 40 56 11 60 72 80 84 88 96 104 108 128 132 21 136 152 156 180 184 204 225 228 232 240 31 248 252 276 288 296 328 344 348 360 372 41 376 384 396 424 441 444 448 450 468 472 51 480 488 492 504 516 536 560 564 568 584 61 600 612 625 632 636 640 664 672 684 708 71 712 720 732 776 792 804 808 824 828 852 81 856 864 872 876 880 882 896 904 936 948 91 972 996 1,016 1,040 1,044 1,048 1,056 1,068 1,089 1,096