打表法判断素数(掌握)

本文介绍了一种高效判断素数的方法——打表法。通过预先计算并存储一定范围内所有素数的状态,实现快速判断任意数是否为素数。文章详细解释了打表法的工作原理,并提供了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


打表法判断素数

 在此之前,我们判断素数的方法多是用暴力枚举法,即若要判断一个数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; 
     }
  } 
//-------------------------------
//-------------------------------
  1. int su[1000022]={1,1};      //素数表,0为素数   
  2. int main()  
  3. {  
  4.     int i,j;   
  5.     for (i=2;i<=500000;i++)  
  6.     {  
  7.         if (su[i])  
  8.             continue;  
  9.         for (j=i+i;j<=1000010;j+=i)  
  10.             su[j]=1;  
  11.     } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值