Honaker primes: Difference between revisions
Content added Content deleted
(Created Nim solution.) |
(→{{header|Nim}}: added {{header|Free Pascal}} checking https://www.numbersaplenty.com/set/Honaker_prime/ for 30000101111) |
||
Line 918: | Line 918: | ||
The 10_000th Honeker prime number is 4_043_749 at position 286_069. |
The 10_000th Honeker prime number is 4_043_749 at position 286_069. |
||
</pre> |
</pre> |
||
=={{header|Pascal}}== |
|||
==={{header|Free Pascal}}=== |
|||
uses [[Extensible_prime_generator#Pascal|primsieve]] <br> |
|||
checking "numbersaplenty.com/set/Honaker_prime" for 30000101111. |
|||
<syntaxhighlight lang="pascal"> |
|||
{$IFDEF FPC}{$MODE DELPHI}{$OPTIMIZATION ON,ALL}{$ENDIF} |
|||
{$IFDEF WINDOWS} {$APPTYPE CONSOLE}{$ENDIF} |
|||
uses |
|||
primsieve; |
|||
function SumOfDecDigits(n:UInt64): Uint32; forward; |
|||
const |
|||
DgtMod = 10000; |
|||
var |
|||
{$ALIGN 32} |
|||
SumDigits : array[0..DgtMod-1] of byte; |
|||
procedure Init; |
|||
var |
|||
i, |
|||
a,b,c,d : NativeUint; |
|||
Begin |
|||
i := DgtMod-1; |
|||
For a := 9 downto 0 do |
|||
For b := 9 downto 0 do |
|||
For c := 9 downto 0 do |
|||
For d := 9 downto 0 do |
|||
Begin |
|||
SumDigits[i] := a+b+c+d; |
|||
dec(i); |
|||
end; |
|||
end; |
|||
procedure OutSpecial(idxH,idxP,p,CntDecDgt:Uint64); |
|||
Begin |
|||
write('(',idxH:9,idxP:11,p:13); |
|||
writeln(' Digitsum :',SumOfDecDigits(p):3,' < ',CntDecDgt:3,' Count of digits )'); |
|||
end; |
|||
procedure OutHonaker(idxH,idxP,p:Uint64); |
|||
begin |
|||
writeln('(',idxH:9,idxP:11,p:13,')'); |
|||
end; |
|||
function SumOfDecDigits(n:UInt64): Uint32; |
|||
var |
|||
tmp: Uint64; |
|||
digit: Uint32; |
|||
Begin |
|||
result := 0; |
|||
repeat |
|||
tmp := n div DgtMod; |
|||
digit := n-tmp*DgtMod; |
|||
n := tmp; |
|||
result +=SumDigits[digit]; |
|||
until n=0; |
|||
end; |
|||
var |
|||
idxP,p,DecDgtLimit : Uint64; |
|||
idxH,lmt,SumDgtPrime,CntDecDgt : UInt32; |
|||
Begin |
|||
init; |
|||
idxP := 0; |
|||
idxH := 0; |
|||
CntDecDgt := 1; |
|||
DecDgtLimit := 10; |
|||
Writeln(' First 50 Honaker primes '); |
|||
repeat |
|||
p := NextPrime; |
|||
inc(idxP); |
|||
SumDgtPrime := SumOfDecDigits(idxP); |
|||
If SumOfDecDigits(idxP) = SumOfDecDigits(p) then |
|||
begin |
|||
inc(IdxH); |
|||
if idxH<= 50 then |
|||
Begin |
|||
write('(',idxH:3,idxP:4,p:5,')'); |
|||
if Idxh mod 5=0 then writeln; |
|||
end; |
|||
end; |
|||
until idxH= 50; |
|||
lmt := 100; |
|||
CntDecDgt := 1; |
|||
DecDgtLimit := 10; |
|||
while DecDgtLimit < p do |
|||
Begin |
|||
CntDecDgt += 1; |
|||
DecDgtLimit *= 10; |
|||
end; |
|||
Writeln; |
|||
Writeln(' n.th PrimeIdx Prime'); |
|||
repeat |
|||
p := NextPrime; |
|||
inc(idxP); |
|||
IF p > DecDgtLimit then |
|||
Begin |
|||
CntDecDgt += 1; |
|||
DecDgtLimit *= 10; |
|||
end; |
|||
SumDgtPrime := SumOfDecDigits(idxP); |
|||
If SumOfDecDigits(idxP) = SumOfDecDigits(p) then |
|||
begin |
|||
inc(IdxH); |
|||
while p > DecDgtLimit do |
|||
Begin |
|||
CntDecDgt += 1; |
|||
DecDgtLimit *= 10; |
|||
end; |
|||
if SumDgtPrime < CntDecDgt then |
|||
OutSpecial(idxH,idxP,p,CntDecDgt); |
|||
if idxH = lmt then |
|||
Begin |
|||
OutHonaker(idxH,idxP,p); |
|||
lmt *= 10; |
|||
end; |
|||
end; |
|||
until lmt> 100*1000*1000; |
|||
end.</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
First 50 Honaker primes |
|||
( 1 32 131)( 2 56 263)( 3 88 457)( 4 175 1039)( 5 176 1049) |
|||
( 6 182 1091)( 7 212 1301)( 8 218 1361)( 9 227 1433)( 10 248 1571) |
|||
( 11 293 1913)( 12 295 1933)( 13 323 2141)( 14 331 2221)( 15 338 2273) |
|||
( 16 362 2441)( 17 377 2591)( 18 386 2663)( 19 394 2707)( 20 397 2719) |
|||
( 21 398 2729)( 22 409 2803)( 23 439 3067)( 24 446 3137)( 25 457 3229) |
|||
( 26 481 3433)( 27 499 3559)( 28 508 3631)( 29 563 4091)( 30 571 4153) |
|||
( 31 595 4357)( 32 599 4397)( 33 635 4703)( 34 637 4723)( 35 655 4903) |
|||
( 36 671 5009)( 37 728 5507)( 38 751 5701)( 39 752 5711)( 40 755 5741) |
|||
( 41 761 5801)( 42 767 5843)( 43 779 5927)( 44 820 6301)( 45 821 6311) |
|||
( 46 826 6343)( 47 827 6353)( 48 847 6553)( 49 848 6563)( 50 857 6653) |
|||
n.th PrimeIdx Prime |
|||
( 100 1855 15913) |
|||
( 1000 24706 283303) |
|||
( 10000 286069 4043749) |
|||
( 100000 3066943 51168613) |
|||
( 1000000 32836375 630589303) |
|||
( 10000000 354922738 7707009643) |
|||
( 36181814 1300010120 30000101111 Digitsum : 8 < 11 Count of digits ) |
|||
(100000000 3784461563 91565150519) |
|||
real 1m43.381s user 1m43.253s sys 0m0.000s (4,4 GHz Ryzen 5600 G) </pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |