30 lines
706 B
Factor
30 lines
706 B
Factor
! Copyright (C) 2009 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: combinators.short-circuit kernel math math.functions
|
|
math.primes random ;
|
|
IN: math.primes.safe
|
|
|
|
<PRIVATE
|
|
|
|
: safe-prime-candidate? ( n -- ? )
|
|
1 + 6 divisor? ;
|
|
|
|
: next-safe-prime-candidate ( n -- candidate )
|
|
next-prime dup safe-prime-candidate?
|
|
[ next-safe-prime-candidate ] unless ;
|
|
|
|
PRIVATE>
|
|
|
|
: safe-prime? ( q -- ? )
|
|
{
|
|
[ 1 - 2 / dup integer? [ prime? ] [ drop f ] if ]
|
|
[ prime? ]
|
|
} 1&& ;
|
|
|
|
: next-safe-prime ( n -- q )
|
|
next-safe-prime-candidate
|
|
dup safe-prime? [ next-safe-prime ] unless ;
|
|
|
|
: random-safe-prime ( numbits -- p )
|
|
random-bits* next-safe-prime ;
|