以前学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;
}
}
}
}
所谓删除法就是在检验过程中如果判定一个数不是素数都就将其赋为零,也可以理解为间接寻找素数,比直接 寻找要简单些
学编程从一点一滴开始。。