export <blum-blum-shub> in random.blum-blum-shub
							parent
							
								
									aae907d5e1
								
							
						
					
					
						commit
						9f46b534e9
					
				| 
						 | 
				
			
			@ -30,4 +30,4 @@ IN: project-euler.164
 | 
			
		|||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
: euler164 ( -- n )
 | 
			
		||||
    init-table 19 [ next-table ] times values sum ;
 | 
			
		||||
    init-table 19 [ next-table ] times values sum ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,17 +12,16 @@ TUPLE: blum-blum-shub x n ;
 | 
			
		|||
: generate-bbs-primes ( numbits -- p q )
 | 
			
		||||
    [ [ random-prime ] curry [ 4 mod 3 = ] generate ] dup bi ;
 | 
			
		||||
 | 
			
		||||
: next-bbs-bit ( bbs -- bit )
 | 
			
		||||
    [ [ x>> 2 ] [ n>> ] bi ^mod dup ] keep (>>x) 1 bitand ;
 | 
			
		||||
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
: <blum-blum-shub> ( numbits -- blum-blum-shub )
 | 
			
		||||
    generate-bbs-primes *
 | 
			
		||||
    [ find-relative-prime ] keep
 | 
			
		||||
    blum-blum-shub boa ;
 | 
			
		||||
 | 
			
		||||
: next-bbs-bit ( bbs -- bit )
 | 
			
		||||
    [ [ x>> 2 ] [ n>> ] bi ^mod ] keep
 | 
			
		||||
    over >>x drop 1 bitand ;
 | 
			
		||||
 | 
			
		||||
PRIVATE>
 | 
			
		||||
 | 
			
		||||
M: blum-blum-shub random-32* ( bbs -- r )
 | 
			
		||||
    0 32 rot
 | 
			
		||||
    [ next-bbs-bit swap 1 shift bitor ] curry times ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue