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