September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -0,0 +1,66 @@
|
|||
begin
|
||||
% calculate the Multiplicative Digital Root (mdr) and Multiplicative Persistence (mp) of n %
|
||||
procedure getMDR ( integer value n
|
||||
; integer result mdr, mp
|
||||
) ;
|
||||
begin
|
||||
mp := 0;
|
||||
mdr := abs n;
|
||||
while mdr > 9 do begin
|
||||
integer v;
|
||||
v := mdr;
|
||||
mdr := 1;
|
||||
while begin
|
||||
mdr := mdr * ( v rem 10 );
|
||||
v := v div 10;
|
||||
v > 0
|
||||
end do begin end;
|
||||
mp := mp + 1;
|
||||
end while_mdr_gt_9 ;
|
||||
end getMDR ;
|
||||
|
||||
% task test cases %
|
||||
write( " N MDR MP" );
|
||||
for n := 123321, 7739, 893, 899998 do begin
|
||||
integer mdr, mp;
|
||||
getMDR( n, mdr, mp );
|
||||
write( s_w := 1, i_w := 8, n, i_w := 3, mdr, i_w := 2, mp )
|
||||
end for_n ;
|
||||
|
||||
begin % find the first 5 numbers with each possible MDR %
|
||||
integer requiredMdrs;
|
||||
requiredMdrs := 5;
|
||||
begin
|
||||
integer array firstFew ( 0 :: 9, 1 :: requiredMdrs );
|
||||
integer array mdrFOund ( 0 :: 9 );
|
||||
integer totalFound, requiredTotal, n;
|
||||
for i := 0 until 9 do mdrFound( i ) := 0;
|
||||
totalFound := 0;
|
||||
requiredTotal := 10 * requiredMdrs;
|
||||
n := -1;
|
||||
while totalFound < requiredTotal do begin
|
||||
integer mdr, mp;
|
||||
n := n + 1;
|
||||
getMDR( n, mdr, mp );
|
||||
if mdrFound( mdr ) < requiredMdrs then begin
|
||||
% found another number with this MDR and haven't found enough yet %
|
||||
totalFound := totalFound + 1;
|
||||
mdrFound( mdr ) := mdrFound( mdr ) + 1;
|
||||
firstFew( mdr, mdrFound( mdr ) ) := n
|
||||
end if_found_another_MDR
|
||||
end while_totalFound_lt_requiredTotal ;
|
||||
% print the table of MDRs andnumbers %
|
||||
write( "MDR: [n0..n4]" );
|
||||
write( "=== ========" );
|
||||
for v := 0 until 9 do begin
|
||||
write( i_w := 3, s_w := 0, v, ": [" );
|
||||
for foundPos := 1 until requiredMdrs do begin
|
||||
if foundPos > 1 then writeon( s_w := 0, ", " );
|
||||
writeon( i_w := 1, s_w := 0, firstFew( v, foundPos ) )
|
||||
end for_foundPos ;
|
||||
writeon( s_w := 0, "]" )
|
||||
end for_v
|
||||
end
|
||||
end
|
||||
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue