Anonymous user
Smallest power of 6 whose decimal expansion contains n: Difference between revisions
Smallest power of 6 whose decimal expansion contains n (view source)
Revision as of 11:40, 9 April 2021
, 3 years ago→{{header|Pascal}}: changed generating of strings.
SqrtNegInf (talk | contribs) (Added Perl) |
m (→{{header|Pascal}}: changed generating of strings.) |
||
Line 92:
Doing long multiplikation like in primorial task.
<lang pascal>program PotOf6;
{$IFDEF FPC} {$MODE DELPHI} {$ENDIF}
uses
sysutils,strutils;
const
// POT_LIMIT = 6260;DEC_LIMIT = 1000000;//'575115' in 6^6260
// POT_LIMIT = 1736;DEC_LIMIT =
//'83081' in 6^1736 mean power 422.48
// POT_LIMIT = 444;DEC_LIMIT = 10000;//'2565' // 0.19s▼
// POT_LIMIT = 444;
//'2565' mean power 135.82 0.157s
// POT_LIMIT = 46;DEC_LIMIT = 100;//'52'▼
//'120' mean power 44.21
//'52' mean power 15.71
//'14' mean power 9.73
type
tMulElem = Uint32;
Line 112 ⟶ 113:
var
Pot_N_str : array of AnsiString;
T0,maxPow,PowerSum,lastpot,SumLenght : INt64;
var
i,j,k : NativeInt;
begin
result := IntToStr(Mul[i]);▼
// fill complete with '0'
fillchar(pS[0],j,'0');
str(Mul[i],S9);
j := length(s9);
move(s9[1],pS[0],j);
k := j;
dec(i);
If i >= 0 then
repeat
//move to the right place, leading '0' is already there
▲ j := length(s);
move(
dec(i);
until i<0;
inc(SumLenght,k);
end;
Line 149 ⟶ 158:
Begin
prod := n*Mul[j]+Carry;
Carry := prod
result[j] := Prod - Carry*LongWordDec;
end;
Line 157 ⟶ 166:
Setlength(result,length(Mul));
end;
procedure OutS(const s:Ansistring;j:nativeInt);
begin
writeln(s,' ',j);
end;
procedure GeneratePot_N_Str(number:NativeInt);
var
PotArrN : array[0..1] of tMul;
i,toggle : NativeInt;
Begin
setlength(Pot_N_str,POT_LIMIT+1);
Pot_N_str[0] := '1';▼
setlength(PotArrN[0],1);
setlength(PotArrN[1],1);
PotArrN[0,0] := 1;
▲ Pot_N_str[0] := '1';
PotArrN[1,0] := number;
//create all pot of numbers up to number**POT_LIMIT with clean up in parallel
SumLenght :=0;
i := 2;
toggle := 0;
while i <= POT_LIMIT do
begin
PotArrN[
ConvToStr(Pot_N_str[i]
toggle := 1-toggle;
inc(i);
end;
writeln(' used by strings ',Numb2USA(IntToStr(SumLenght)),' bytes');
end;
procedure OutT(const s: Ansistring;j:NativeInt);
▲ setlength(PotArrN,0);
writeln(j:10,maxPow/(j+1):8:2,(maxPow-lastPot)/1024:8:2,(GetTickCount64-T0)/1000:10:3);
T0 := GetTickCount64;
lastpot := maxPow;
end;
var
s:
i,j,number
Begin
number := 6;
T0 := GetTickCount64;
GeneratePot_N_Str(number);
writeln('Generating time to power limit ',(GetTickCount64-T0)/1000:5:3,'s');
T0 := GetTickCount64;
lastpot := 0;
For i := 0 to DEC_LIMIT-1 do
begin
For j := 0 to POT_LIMIT do
Begin
if Pos(s,Pot_N_str[j])>0 then
Begin
PowerSum
IF POT_Limit > 99 then
write(s:3,number:3,'^',j:5,
else
writeln(s:3,number:3,'^',j:2,' ', Pot_N_str[j]);
break;
end;
▲ Begin
end;
end;
writeln;
writeln('
▲ setlength(Pot_N_str,0);
end.</lang>
{{out}}
<pre>
used by strings 330
Generating time to power limit 0.000s
0 6^ 9 10077696
1 6^ 0 1
Line 250 ⟶ 264:
20 6^26 170581728179578208256
21 6^ 3 216
mean power to find string 9.73
//Search strings 0 to 99999
used by strings 1,174,099 bytes
Generating time to power limit 0.008s
99999 6^ 1287 1736
mean power to find string 422.48
real 0m14,684s
user 0m14,522s</pre>
=={{header|Perl}}==
|