C#寻找素数

以前学C的时候学过一些 寻找素数的方法,常规的方法似乎执行效率不高,最近在论坛上发现一种“删除法”寻找素数,空间复杂度小了不少,其中少了些重复执行,但不必执行的步骤,面是一个关于寻找从0到N素数的类,编程一点一滴从小程序开始

class prime
  
     {
  
       public static int[] PrimeList;
  
       public static void FindPrime(int n)
  
       {
  
         int[] IntList;
  
         IntList=new int[n];       
  
         for (int p=2;p<=n;p++) IntList[p-1]=p; //把2到N赋值给该数组
  
         for (int p=2;p<Math.Sqrt(n);p++)
  
         {
  
            int j=p+1;
  
            while (j<=n)
  
            {
  
              if ((IntList[j-1]!=0 ) && ((IntList[j-1]% p)==0) ) IntList[j-1]=0; //确定不是素数,把该元素赋值为零
  
              j=j+1;
  
            }
  
         }
  
         int i=0;
  
         for (int p=2;p<=n;p++)
  
         {
  
            if (IntList[p-1]!=0)

                                           i=i+1; //有上步可知不是素数的元素都被赋为0;统计不为0的个数,即从0到N素数的个数i
  
         }
  
         PrimeList=new int[i]; //建立数组来存储素数
  
         i=0;
  
         for (int p=2;p<=n;p++)
  
         {
  
            if (IntList[p-1]!=0) //到此为止,数组中不为零的元素是素数,
  
            {
  
              PrimeList[i]=IntList[p-1];//将素数存入数组中
  
              i=i+1;
  
            }         
  
         }
  
       }
  
     }

所谓删除法就是在检验过程中如果判定一个数不是素数都就将其赋为零,也可以理解为间接寻找素数,比直接 寻找要简单些

                                                                                                                                         学编程从一点一滴开始。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值