使用BitArray判断素数

首先显示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 }

 

转载于:https://www.cnblogs.com/cainiaoBlog/p/5579174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值