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;
}
附代码:
//
// 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;
}