您的位置:首页 > 编程语言 > C语言/C++

C/C++中的素数筛选

2016-09-03 10:52 309 查看
~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~


Examination
Problem

      质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。

      判断101-200之间有多少个素数,并输出所有素数。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Analysis

      程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。  

      在一般领域,对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为质数。

      质数大于等于2不能被它本身和1以外的数整除    

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Program

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const long long size=100000;//修改size的数值以改变最终输出的大小

long long zhishu[size/2];
void work(){//主要程序
zhishu[1]=2;
long long k=2;
for(long long i=3;i<=size;i++){//枚举每个数
bool ok=1;
for(long long j=1;j<k;j++){//枚举已经得到的质数
if(i%zhishu[j]==0){
ok=!ok;
break;
}
}
if(ok){
zhishu[k]=i;
cout<<"count"<<k<<' '<<i<<endl;
k++;
}
}
}

int main(){
freopen("zhishu.out","w",stdout);
cout<<"count1 2"<<endl;
work();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool isPrime(unsigned long n) {
if (n <= 3) {
return n > 1;
} else if (n % 2 == 0 || n % 3 == 0) {
return false;
} else {
for (unsigned short i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: