打表法判断素数
在此之前,我们判断素数的方法多是用暴力枚举法,即若要判断一个数n是否是素数,就需要从i=2开始,一直到n/2为止,判断是否有数能整除n,若没有的话,则n为素数。 这样判断素数的方法有一个致命的弱点,就是容易超时,因为每判断一次都要从2开始一个一个作整除判断,一旦要判断的这个n稍大一点的话,这种方法就无能为力了。因此,这里引入一种新的判断素数的方法--打表判断法。
思路:先确定要判断的数大概在哪个范围之内,以便于开一个合适的数组prime[],首先要将prime数组初始化为0,i从2开始,如果对应的prime[i]为0 的话,即从j=i*i开始,到最大的范围,将这些位置的prime的值都变为1,表示这些数都不是素数,这里注意j在加的时候加的不是1,而是i,这样一直下去,一张素数表就完成了,当需要判断某个数是否是素数的时候只要判断prime[i]的值是多少就可以了,如果是0,表示这个i是素数,如果是1,表示这个i不是素数。
下面是该函数 的代码
void dabiao()
{
memset(biao,0,sizeof(biao));
for(int i=2;i<=31623;++i)
{
if(biao[i]) continue;
for(int j=i*i;j<MAXSIZE;j+=i)
{
biao[j]=1;
}
}
//-------------------------------
//-------------------------------
- int su[1000022]={1,1}; //素数表,0为素数
- int main()
- {
- int i,j;
- for (i=2;i<=500000;i++)
- {
- if (su[i])
- continue;
- for (j=i+i;j<=1000010;j+=i)
- su[j]=1;
- }