首先显示1024范围内的所有素数,然后显示输入的数是否是素数。1024 是代码中计算的素数的范围,可以修改。计算平方根,是为了确定一个基数的范围。1024的平方根是32,两个超过32 的数相乘,肯定大于1024,所以基数的范围是2-32,倍数的范围是基数的倍数小于1024。思路是:把所有基数的所有倍数在BitArray里面的值设置为false,BitArray中为true的下标,即为素数。 1 public class BitArrayClass 2 { 3 public static void FindPrimeNum(int val) 4 { 5 BitArray bitSet = new BitArray(1024, true); 6 7 BuildSieve(bitSet); 8 9 Console.WriteLine(); 10 if (bitSet.Get(val)) 11 { 12 Console.Write(val + ":true"); 13 } 14 else 15 { 16 Console.Write(val + ":false"); 17 } 18 } 19 20 private static void BuildSieve(BitArray bits) 21 { 22 string primes = string.Empty; 23 24 //初始化时设置默认值 25 //for (int i = 0; i <= bits.Count - 1; i++) 26 //{ 27 // bits.Set(i, true); 28 //} 29 30 int lastBit = int.Parse(Math.Sqrt(bits.Count).ToString()); 31 32 for (int i = 2; i <= lastBit; i++) 33 { 34 if (bits.Get(i)) 35 { 36 for (int j = 2; j < bits.Count; j++) 37 { 38 int k = i * j; 39 if (k < bits.Count) 40 { 41 bits.Set(k, false); 42 } 43 else 44 { 45 break; 46 } 47 } 48 } 49 } 50 51 int counter = 0; 52 for (int i = 1; i < bits.Count; i++) 53 { 54 if (bits.Get(i)) 55 { 56 primes += i.ToString(); 57 counter++; 58 if ((counter % 7) == 0) 59 { 60 primes += "\n"; 61 } 62 else 63 { 64 primes += " "; 65 } 66 } 67 } 68 69 Console.Write(primes); 70 } 71 }
时间: 2024-11-05 07:40:11