# sieve for irreducible polynomials of degree less than n. polynomials
# represented as integers with corresponding binary
# representations. zero and unit polynomials 0 and 1 excluded by
# convention
use integer;
my $n = 9;
my @c; # reducibles (composites)
for (my $k=2;$k<(1<<$n);$k++) {
next if $c[$k];
print "k=$k prime: ",polystr($k),"\n";
for (my $j;$j<(1<<$n);$j++) {
my $m = polyprod($k,$j);
# print "(",polystr($k),")*(",polystr($j),")=",polystr($m),"\n";
$c[$m] = 1 if ($m<(1<<$n));
}
}
sub polystr($) {
my $q = shift;
return 0 if ($q == 0);
return join("+",map { "x^$_"} grep { $q & (1<<$_) } 0..(2*$n-1));
}
sub polyprod($$) {
my ($p1,$p2) = @_;
my $s = 0;
for (my $i=0;$i<$n;$i++) {
$s ^= ($p2<<$i) if ($p1 & (1<<$i));
}
return $s;
}