fix miller-rabin, safe primes
parent
9b5933d97c
commit
a2a5129a84
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: combinators kernel locals math math.functions math.ranges
|
USING: combinators kernel locals math math.functions math.ranges
|
||||||
random sequences sets combinators.short-circuit ;
|
random sequences sets combinators.short-circuit math.bitwise ;
|
||||||
IN: math.miller-rabin
|
IN: math.miller-rabin
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
@ -14,15 +14,17 @@ TUPLE: positive-even-expected n ;
|
||||||
n 1 - :> n-1
|
n 1 - :> n-1
|
||||||
n-1 factor-2s :> s :> r
|
n-1 factor-2s :> s :> r
|
||||||
0 :> a!
|
0 :> a!
|
||||||
t :> prime?!
|
|
||||||
trials [
|
trials [
|
||||||
|
drop
|
||||||
n 1 - [1,b] random a!
|
n 1 - [1,b] random a!
|
||||||
a s n ^mod 1 = [
|
a s n ^mod 1 = [
|
||||||
|
f
|
||||||
|
] [
|
||||||
r iota [
|
r iota [
|
||||||
2^ s * a swap n ^mod n - -1 =
|
2^ s * a swap n ^mod n - -1 =
|
||||||
] any? not [ f prime?! trials + ] when
|
] any? not
|
||||||
] unless drop
|
] if
|
||||||
] each prime? ;
|
] any? not ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
@ -83,7 +85,6 @@ ERROR: too-few-primes ;
|
||||||
1 + 6 divisor? ;
|
1 + 6 divisor? ;
|
||||||
|
|
||||||
: next-safe-prime-candidate ( n -- candidate )
|
: next-safe-prime-candidate ( n -- candidate )
|
||||||
1 - 2/
|
|
||||||
next-prime dup safe-prime-candidate?
|
next-prime dup safe-prime-candidate?
|
||||||
[ next-safe-prime-candidate ] unless ;
|
[ next-safe-prime-candidate ] unless ;
|
||||||
|
|
||||||
|
@ -101,5 +102,8 @@ PRIVATE>
|
||||||
dup miller-rabin
|
dup miller-rabin
|
||||||
[ nip ] [ drop next-safe-prime ] if ;
|
[ nip ] [ drop next-safe-prime ] if ;
|
||||||
|
|
||||||
|
: random-bits* ( numbits -- n )
|
||||||
|
[ random-bits ] keep set-bit ;
|
||||||
|
|
||||||
: random-safe-prime ( numbits -- p )
|
: random-safe-prime ( numbits -- p )
|
||||||
random-bits next-safe-prime ;
|
1- random-bits* next-safe-prime ;
|
||||||
|
|
Loading…
Reference in New Issue