C++ 确定一个数是否为素数(素数筛法)

C++ 确定一个数是否为素数(素数筛法)

附C++程序:(这里约定:0,1,负数都是非素数)

#include <iostream>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int n=0;
    while (cin>>n) {
        bool prime_flag=true;
        int bound = (int)sqrt(x) + 1; //计算枚举上界,为防止double值带来的精度损失,采用根号值取整后再加1,即宁愿多枚举一个数也不能少枚举一个数
        if(n<=1){
            cout<<"no"<<endl;
        }
        else{
            for(int i=2;i<bound;i++){
                if (n%i==0) {
                    cout<<"no"<<endl;
                    prime_flag=false;
                    break;
                }
            }
            if (prime_flag==true) {
                cout<<"yes"<<endl;
            }
        }
    }
    
    return 0;
}

C++ 确定一个数是否为素数(素数筛法)

附代码:

//
//  51.cpp
//  素数
//
//  Created by chenmeiqi on 2019/3/26.
//  Copyright © 2019年 chenmeiqi. All rights reserved.
//

#include<iostream>
#include<cmath>
using namespace std;

int main(void){
    int n=0;
    int a[1000001]={0};             // 0~1000000 个数
    a[0]=a[1]=1;
    while(cin>>n){
        bool prime_flag=false;
        for(int i=2;i<n;i++){           // 依次遍历2到1000000所有数字
            if(a[i]==0){
                int frequence=n/i;
                for(int j=i;j<=frequence;j++){           // 没有从 2 * i 开始,而是直接从 i * i 开始
                    a[i*j]=1;
                }
            }
        }
        int count=0;
        for(int k=1;k<n;k+=10){
            if(a[k]==0){
                if(count!=0){       // 除了第一个数,其他前面均输出空格,满足题目中 “素数之间用空格隔开,最后一个素数后没有空格” 的要求
                    cout<<" ";
                }
                cout<<k;
                prime_flag=true;
                count++;
            }
        }
        if(prime_flag==false){          // 没有一个素数,输出-1
            cout<<"-1";
        }
        cout<<endl;
        
    }
    return 0;
}

C++ 确定一个数是否为素数(素数筛法)