System.Collections.BitArray用来存储位的集合。位集合可以有效的表示布尔值的集合。
筛选掉从是其他数(从2开始)倍数的那些数,最后剩下的数都是素数。
两个运算数中只有一个1,那么结果为1
一个数值(符号左侧)向左移动指定的位数(符号右侧)。
数值3为00000011,3<<1变成00000110
一个数值(符号左侧)向右移动指定的位数(符号右侧)。
数值3为00000011,3>>1变成00000001
BitArraybitset1 = new BitArray(32);///1.32个位,默认初始位false
BitArraybitset2 = new BitArray(32,true);///2.32个位,指定初始为true
byte[]byteset1 = new byte[]{ 2, 5 };///0000001000000101。每个字节表示 8个连续位
BitArraybitset3 = new BitArray(byteset1);///3.以字节数组为参数,BitArray包含了2、5的二进制位
//内部为:False True FalseFalse False False False False True False True False False False False False
//即:01000000,10100000。为2,5的二进制颠倒顺序。
int[]intset2 = new int[]{ 2, 5 };///0000001000000101每个整数表示 32 个连续位
BitArraybitset4 = new BitArray(intset2);///4.以整型数组为参数,BitArray包含了2、5的二进制位
//内部为:0100000000000000 00000000 00000000,10100000 00000000 00000000 00000000
//即:00000000000000000000000001000000,00000000000000000000000010100000。为2,5的二进制颠倒顺序。
bitset3.Set(0, false);
bitset3.SetAll( true);
boolbbb = bitset3.Get(9);
bitset2.And(bitset1);
bitset2.Or(bitset1);
bitset2. Xor(bitset1);
bitset3=bitset3.Not();
bool[]arr = new bool[64];
bitset4.CopyTo(arr, 0);
intvalue = 1023;///1023以内的素数
BitArraybitset=newBitArray(value+1);
for(int i = 0; i < bitset.Count; i++)
{
bitset.Set(i, true);///默认true都是素数
}
inttimes = 0;
for(int i = 3; i < bitset.Count; i++)///3开始
{
if(bitset.Get(i))
{
intlastbit = (int)Math.Sqrt(i);///数的平方根
for(int j = 2; j <= lastbit; j++)///是否是从2到数平方根之间有倍数关系
{
if(i % j == 0)
{ bitset.Set(i, false); times++; }///是倍数则变为false非素数
}
}
}
intnum = 0;
for(int i = 0; i < bitset.Count; i++)
{
if(bitset.Get(i))
{
num++;
Console.Write(i.ToString()+",");
}
}
///0,1,2,3,5,7,11,13,…-…-,1013,1019,1021,
Console.WriteLine();
Console.WriteLine("Times:{0}.Number:{1}",times,num);
///Times:2618.Number:174