27 lines
		
	
	
		
			655 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			655 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 -- ? )
 | 
						|
    { [ prime? ] [ 1 - 2 / 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 ;
 |