C:\test>perl -E"++$h{ int( rand 65536 ) } for 1 .. 1e6; say scalar keys %h; grep{ $_ & 1 } keys %h or say 'No odd numbers found'"
32768
No odd numbers found
####
C:\test>randperiod -M=2
41 18467
i:1 n:412286284
First sequence of 2 values repeated itself after 412286284 calls to rand
####
C:\test>randperiod -M=3
41 18467 6334
i:2 n:2147418117
First sequence of 3 values repeated itself after 2147418117 calls to rand
####
#! perl -slw
use strict;
sub rand32768{ int( rand 32768 ) }
$|++;
our $M //= 10;
srand( 1 );
my @first = map rand32768(), 1 .. $M;
print "@first";
my $n = $M;
OUTER: while( 1 ) {
++$n until rand32768 == $first[ 0 ];
for my $i ( 1 .. $M - 1 ) {
++$n;
printf "\ri:$i n:$n";
redo OUTER unless rand32768() == $first[ $i ];
}
last;
}
print "\nFirst sequence of $M values repeated itself after $n calls to rand";