export <blum-blum-shub> in random.blum-blum-shub
parent
aae907d5e1
commit
9f46b534e9
|
@ -30,4 +30,4 @@ IN: project-euler.164
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
: euler164 ( -- n )
|
: 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 )
|
: generate-bbs-primes ( numbits -- p q )
|
||||||
[ [ random-prime ] curry [ 4 mod 3 = ] generate ] dup bi ;
|
[ [ 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 )
|
: <blum-blum-shub> ( numbits -- blum-blum-shub )
|
||||||
generate-bbs-primes *
|
generate-bbs-primes *
|
||||||
[ find-relative-prime ] keep
|
[ find-relative-prime ] keep
|
||||||
blum-blum-shub boa ;
|
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 )
|
M: blum-blum-shub random-32* ( bbs -- r )
|
||||||
0 32 rot
|
0 32 rot
|
||||||
[ next-bbs-bit swap 1 shift bitor ] curry times ;
|
[ next-bbs-bit swap 1 shift bitor ] curry times ;
|
||||||
|
|
Loading…
Reference in New Issue