Long primes: Difference between revisions

m
Forth - rewrote modpow to use locals
m (Forth - added execution time)
m (Forth - rewrote modpow to use locals)
Line 657:
 
=={{header|Forth}}==
{{works with|Gforth}}
The prime sieve code was borrowed from [[Sieve of Eratosthenes#Forth]].
<lang forth>: prime? ( n -- ? ) here + c@ 0= ;
Line 678 ⟶ 679:
2drop ;
 
: modpow ({ n1c n2b n3a -- na^b )mod c }
dupc 1 = if 2drop drop 0 exit then
1 >r
rota overc mod -rotto a
begin
overb 0>
while
overb 1 and 1 = if
2 pick r>a * overc mod >r
then
rota dupa * overc mod -rotto a
swapb 2/ swapto b
repeat ;
2drop drop r> ;
 
: modpow10 ( n1 n2 -- n )
10 -rot modpow ;
 
: divide_out ( n1 n2 -- n )
Line 713 ⟶ 710:
r@ prime? if
dup r@ mod 0= if
over dup 1- r@ / swap10 modpow10modpow 1 = if
2drop rdrop false exit
then
Line 723 ⟶ 720:
rdrop
dup 1 = if 2drop true exit then
over 1- swap / swap10 modpow10modpow 1 <> ;
 
: next_long_prime ( n -- n )
1,777

edits