Honaker primes: Difference between revisions

m
Forth performance improvement
(Added Forth solution)
m (Forth performance improvement)
 
Line 754:
=={{header|Forth}}==
{{works with|Gforth}}
<syntaxhighlight lang="forth">:5000000 prime?constant ( n -- ? ) here + c@ 0= ;limit
create sieve limit allot
: notprime! ( n -- ) here + 1 swap c! ;
 
: prime_sieveprime? {( n -- }? ) sieve + c@ 0= ;
: notprime! ( n -- ) heresieve + 1 swap c! ;
here n erase
 
0 notprime!
: prime_sieve
1 notprime!
nsieve 4limit > iferase
n 4 do i notprime! 2 +loop
then
3
begin
dup dup * nlimit <
while
dup prime? if
nlimit over dup * do
i notprime!
dup 2* +loop
Line 781 ⟶ 779:
10 /mod recurse + ;
 
: next_primenext_odd_prime ( u -- u )
begin
12 + dup prime?
until ;
 
: next_honaker_prime ( u u -- u u )
begin
swap next_primenext_odd_prime swap 1+
2dup digit_sum swap digit_sum =
until ;
Line 796 ⟶ 794:
 
: main
5000000 prime_sieve
." First 50 Honaker primes (index, prime):" cr
03 02 0 \ prime prime-index honaker-index
begin
dup 50 <
1,777

edits