21xrx.com
2024-12-27 04:29:14 Friday
登录
文章检索 我的文章 写文章
C++判断素数方法
2023-07-02 17:08:59 深夜i     --     --
C++ 素数 判断方法 质数 除法算法

素数是指只能被1和它本身整除的正整数,也就是一个数若不能被其他数整除,则它是素数。在数学中,素数的重要性是不言而喻的,学习编程的人员需要使用C++判断素数方法,以下是几种方法。

1. 循环判断法

判断一个数是否是素数,可以让它从2开始一直到它自己做除法,如果余数为0说明它不是素数。但若从2循环到n-1的每一个数都进行除法判断,耗费的计算时间很多。改进方法是只需要循环到n的平方根即可。

bool is_prime(int n){

  if(n<=1) return false;

  for(int i=2;i*i<=n;i++){

    if(n%i==0) return false;

  }

  return true;

}

2. 埃氏筛法

埃氏筛法的基本思想是从2开始,将每个素数的倍数都标记成合数。

vector prime(int n){

  vector res;

  vector is(n+1,true);

  is[0]=false;

  is[1]=false;

  for(int i=2;i<=n;i++){

    if(is[i]){

      res.push_back(i);

      for(int j=2*i;j<=n;j+=i){

        is[j]=false;

      }

    }

  }

  return res;

}

3. 线性筛

线性筛法是在埃氏筛法的基础上发展出来的一种算法,它可以在O(n)的时间复杂度内求出n以内的所有素数。

vector prime_table(int n){

  vector res;

  vector is(n+1);

  for(int i=2;i<=n;i++){

    if(!is[i]){

      res.push_back(i);

    }

    for(int j=0;j <=n;j++){

      is[i*res[j]]=1;

      if(i%res[j]==0) break;

    }

  }

  return res;

}

总结:

以上这些方法均可有效判断一个数是否为素数,但方法的效率并不相同,具体使用哪一种方法,需要根据实际情况进行选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章