C语言/C++判断素数的两种方法

题目:输入n(0

方法一

常规方法,即用循环一个个判断n以内的数是否为素数

#include
int main(){
     
    int n,i,j,k=0;
    scanf("%d",&n);
    for(i=2;i<=n;i+=1+i%2){
     
        j=2;
        for(;j*j<=i;j++){
     if(!(i%j))break;}
        if(j*j>i)printf("%d ",i);
    }


方法二

标记数组法

  • 建立一个标志数组,把合数数都标记上
  • 然后输出未被标记的质数
#include
#include
int main(){
     
   int n,i,j;
   scanf("%d",&n);
   int *b=(int*)calloc(n+1,sizeof(int));//建立长度为n+1的数组
   for(i=2;i*i<=n;i++){
     
       for(j=2;i*j<=n;j++){
     b[i*j]=1;}
   }//标记合数
    for(i=2;i<=n;i++){
     if(!b[i])printf("%d ",i);}//输出未被标记的质数
    free(b);//释放内存
}

你可能感兴趣的:(c++,c语言,数据结构,算法)