[C++]埃拉托色尼算法
/*
埃拉托色尼算法
问题描述:定义一个正整数n,求0-n范围以内的所有质数
@date 2017-03-06
@author Johnny Zen
*/
#include<iostream>
#include<math.h>
using namespace std;
void Eratosthenes(int arrs[],int n){ //arrs暂时设置为空指针,意为在返回目标数组(n范围内的所有质数数组)
int sqr,j;
for(int i=2;i<n;i++){
arrs[i] = i; //目标数组初始化
sqr = sqrt(i); //sqr 向下取整 注意:变量名sqr不能取名为sqrt,否则发生关键字冲突,无法编译!
for(int k = 2;k<=sqr;k++){ //因为: 在sqrt(i)以后的含小于sqrt(i)倍数关系的数据都已经被清除,剩下的均为质数
if(arrs[k]!=0){
j = pow(k,2);
while(j<=n){
arrs[j] = 0; //因数置0
j = j+k; //最为巧妙处: 加法 k*k k*(k+1) k*(k+2) ----k*(k+n)
}
}
}
}
//输出
for(int i = 2;i<n;i++)
if(arrs[i]!=0)
cout<<arrs[i]<<'\t';
}
int main(){
int n,*arrs;
cout<<"请输入数N:";
cin>>n;
arrs = new int[n]; //创建数组
Eratosthenes(arrs,n);
delete [] arrs;
return 0;
}
}
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!