跳转到主内容
极星编程网:以代码为星,赴技术山海!

怎么快速判断一个数是不是素数?C++代码大揭秘!

文章导读

大家好,我是苏承栈,今天我们来聊聊素数判断这个话题。素数,也就是质数,在编程中经常遇到。那么,怎么快速判断一个数是不是素数呢?下面我给大家详细介绍几种方法,并附上C++代码示例。

素数定义

素数,顾名思义,就是只能被1和它本身整除的自然数。比如2、3、5、7等都是素数,而4、6、8等则不是。

素数判断方法

1. 定义法

最简单的方法就是试除法,将待判断的数除以从2到它本身减1的所有整数,如果有任何一个整数能整除它,那么它就不是素数。

bool isPrime(int n){
 bool yes=true;
 for(int i=2;i

2. 定义法改进

由于一个数的因数总是成对出现的,所以只需要判断到它的平方根即可。

bool isPrime2(int n){
 bool yes=true;
 for(int i=2;i<=sqrt(n);i++){
  if(n%i==0){
   yes=false;
   break;
  }
 }
 return yes;
}

3. 取模法

对于大于6的数,我们可以通过取模的方式快速排除一些非素数。

bool isPrime3(int n){
 bool yes=false;
 if(n==2||n==3||n==5){
  yes=true;
 }
 else if(n%6==1||n%6==5){
  yes=true;
  for(int i=2;i<=sqrt(n);i++){
   if(n%i==0){
    yes=false;
    break;
   }
  }
 }
 return yes;
}

4. 筛选法(Eratosthenes筛选)

筛选法是一种更高效的方法,通过筛选掉一定范围内的合数,剩下的就是素数。

bool isPrime4(int n){
 bool yes=false;
 int num[100000]={0};
 for(int i=2;i<100000;i++){
  if(!num[i]){
   for(int j=i+i;j<100000;j+=i){
    num[j]=1;
   }
  }
 }
 if(!num[n]){
  yes=true;
 }
 return yes;
}

5. 筛选法改进

筛选法可以通过优化,提高判断素数的效率。

bool isPrime5(int n){
 bool yes=false;
 int num[100000]={0};
 if(n==2){
  yes=true;
 }
 else{
  for(int i=0;i<100000;i++){
   if(!num[i]){
    for(int j=(2*i+3)*(2*i+3);j<(2*100000+3);j+=2*(2*i+3)){
     num[(j-3)/2]=1;
    }
   }
  }
 }
 if((n-3)%2==0){
  if(!num[(n-3)/2]){
   yes=true;
  }
 }
 return yes;
}

总结

以上就是几种判断素数的方法,每种方法都有其优缺点。在实际应用中,可以根据需要选择合适的方法。

我是苏承栈,如果你对编程有任何疑问,欢迎来「极星编程网」(www.jxgpc.com)和我交流。

相关文章