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 ;
 |