首先显示1024范围内的所有素数,然后显示输入的数是否是素数。1024 是代码中计算的素数的范围,可以修改。
计算平方根,是为了确定一个基数的范围。1024的平方根是32,两个超过32 的数相乘,肯定大于1024,所以基数的范围是2-32,倍数的范围是基数的倍数小于1024。
思路是:把所有基数的所有倍数在BitArray里面的值设置为false,BitArray中为true的下标,即为素数。
1 public class BitArrayClass
{
public static void FindPrimeNum(int val)
{
BitArray bitSet = new BitArray(, true);
BuildSieve(bitSet);
Console.WriteLine();
if (bitSet.Get(val))
{
Console.Write(val + ":true");
}
else
{
Console.Write(val + ":false");
}
}
private static void BuildSieve(BitArray bits)
{
string primes = string.Empty;
//初始化时设置默认值
//for (int i = 0; i <= bits.Count - 1; i++)
//{
// bits.Set(i, true);
//}
int lastBit = int.Parse(Math.Sqrt(bits.Count).ToString());
for (int i = ; i <= lastBit; i++)
{
if (bits.Get(i))
{
for (int j = ; j < bits.Count; j++)
{
int k = i * j;
if (k < bits.Count)
{
bits.Set(k, false);
}
else
{
break;
}
}
}
}
int counter = ;
for (int i = ; i < bits.Count; i++)
{
if (bits.Get(i))
{
primes += i.ToString();
counter++;
if ((counter % ) == )
{
primes += "\n";
}
else
{
primes += " ";
}
}
}
Console.Write(primes);
}
}