#!perl -w use strict; no strict "vars"; use Bit::Vector; # ====================================================================== # $set = new Bit::Vector($elements); # $set->Fill(); # $set->Empty(); # $set->Primes(); # $set->Bit_Off($i); # $set->Bit_On($i); # $set->bit_flip($i); # $set->contains($i); # $set->Norm(); # $set1->equal($set2); # ====================================================================== $limit = 1000; print "1..", ($limit+4)*2, "\n"; @prime = (0) x ($limit+1); $prime[2] = 1; $prime[3] = 1; $prime[5] = 1; $prime[7] = 1; $prime[11] = 1; $prime[13] = 1; $prime[17] = 1; $prime[19] = 1; $prime[23] = 1; $prime[29] = 1; $prime[31] = 1; $prime[37] = 1; $prime[41] = 1; $prime[43] = 1; $prime[47] = 1; $prime[53] = 1; $prime[59] = 1; $prime[61] = 1; $prime[67] = 1; $prime[71] = 1; $prime[73] = 1; $prime[79] = 1; $prime[83] = 1; $prime[89] = 1; $prime[97] = 1; $prime[101] = 1; $prime[103] = 1; $prime[107] = 1; $prime[109] = 1; $prime[113] = 1; $prime[127] = 1; $prime[131] = 1; $prime[137] = 1; $prime[139] = 1; $prime[149] = 1; $prime[151] = 1; $prime[157] = 1; $prime[163] = 1; $prime[167] = 1; $prime[173] = 1; $prime[179] = 1; $prime[181] = 1; $prime[191] = 1; $prime[193] = 1; $prime[197] = 1; $prime[199] = 1; $prime[211] = 1; $prime[223] = 1; $prime[227] = 1; $prime[229] = 1; $prime[233] = 1; $prime[239] = 1; $prime[241] = 1; $prime[251] = 1; $prime[257] = 1; $prime[263] = 1; $prime[269] = 1; $prime[271] = 1; $prime[277] = 1; $prime[281] = 1; $prime[283] = 1; $prime[293] = 1; $prime[307] = 1; $prime[311] = 1; $prime[313] = 1; $prime[317] = 1; $prime[331] = 1; $prime[337] = 1; $prime[347] = 1; $prime[349] = 1; $prime[353] = 1; $prime[359] = 1; $prime[367] = 1; $prime[373] = 1; $prime[379] = 1; $prime[383] = 1; $prime[389] = 1; $prime[397] = 1; $prime[401] = 1; $prime[409] = 1; $prime[419] = 1; $prime[421] = 1; $prime[431] = 1; $prime[433] = 1; $prime[439] = 1; $prime[443] = 1; $prime[449] = 1; $prime[457] = 1; $prime[461] = 1; $prime[463] = 1; $prime[467] = 1; $prime[479] = 1; $prime[487] = 1; $prime[491] = 1; $prime[499] = 1; $prime[503] = 1; $prime[509] = 1; $prime[521] = 1; $prime[523] = 1; $prime[541] = 1; $prime[547] = 1; $prime[557] = 1; $prime[563] = 1; $prime[569] = 1; $prime[571] = 1; $prime[577] = 1; $prime[587] = 1; $prime[593] = 1; $prime[599] = 1; $prime[601] = 1; $prime[607] = 1; $prime[613] = 1; $prime[617] = 1; $prime[619] = 1; $prime[631] = 1; $prime[641] = 1; $prime[643] = 1; $prime[647] = 1; $prime[653] = 1; $prime[659] = 1; $prime[661] = 1; $prime[673] = 1; $prime[677] = 1; $prime[683] = 1; $prime[691] = 1; $prime[701] = 1; $prime[709] = 1; $prime[719] = 1; $prime[727] = 1; $prime[733] = 1; $prime[739] = 1; $prime[743] = 1; $prime[751] = 1; $prime[757] = 1; $prime[761] = 1; $prime[769] = 1; $prime[773] = 1; $prime[787] = 1; $prime[797] = 1; $prime[809] = 1; $prime[811] = 1; $prime[821] = 1; $prime[823] = 1; $prime[827] = 1; $prime[829] = 1; $prime[839] = 1; $prime[853] = 1; $prime[857] = 1; $prime[859] = 1; $prime[863] = 1; $prime[877] = 1; $prime[881] = 1; $prime[883] = 1; $prime[887] = 1; $prime[907] = 1; $prime[911] = 1; $prime[919] = 1; $prime[929] = 1; $prime[937] = 1; $prime[941] = 1; $prime[947] = 1; $prime[953] = 1; $prime[967] = 1; $prime[971] = 1; $prime[977] = 1; $prime[983] = 1; $prime[991] = 1; $prime[997] = 1; $set1 = new Bit::Vector($limit+1); $set2 = new Bit::Vector($limit+1); $set3 = new Bit::Vector($limit+1); $set1->Fill(); $set2->Empty(); $set3->Primes(); $set1->Bit_Off(0); $set1->Bit_Off(1); $set2->Bit_On(0); $set2->Bit_On(1); for ( $j = 4; $j <= $limit; $j += 2 ) { $set1->Bit_Off($j); $set2->Bit_On($j); } for ( $i = 3; ($j = $i * $i) <= $limit; $i += 2 ) { for ( ; $j <= $limit; $j += $i ) { $set1->Bit_Off($j); $set2->Bit_On($j); } } $n = 1; for ( $i = 0; $i <= $limit; ++$i ) { if ($set1->contains($i) == $prime[$i]) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($set2->bit_flip($i) == $prime[$i]) {print "ok $n\n";} else {print "not ok $n\n";} $n++; } if ($set1->Norm() == 168) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($set2->Norm() == 168) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($set3->Norm() == 168) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($set1->equal($set2)) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($set1->equal($set3)) {print "ok $n\n";} else {print "not ok $n\n";} $n++; if ($set2->equal($set3)) {print "ok $n\n";} else {print "not ok $n\n";} $n++; __END__