筛法求质数
Time limit per test: 1.0 seconds
Memory limit: 256 megabytes
输入一个整数 n (2≤n≤10000) ,使用筛法计算并在一行中输出所有不大于 n 的质数(每个质数之间留一个空格,最后一个质数之后没有空格)。
Input
输入一个正整数 (1<n<10001) 。
Output
在一行中输出所有不大于 n 的质数。
注意:两个质数之间一个空格分隔,最后一个质数之后没有空格,但需要输出一个换行符。
Examples
input
30
output
2 3 5 7 11 13 17 19 23 29
Note
算法参考 16C_2.ppt PP28-32 中的 Sieve of Eratosthenes 算法。
参考资料:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
自己写的筛法,希望能给我点意见,非常感谢。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cmath>
using namespace std;
#define PrimeMax 10000
bool Prime[PrimeMax+1];
void IsPrime()//Prime[i]存储i是否是素数
{
memset(Prime,true,sizeof(Prime));
Prime[1]=Prime[0]=false;
int n=PrimeMax,m=sqrt(PrimeMax);
for(int i=2; i<=m; i++)
if(Prime[i])
for(int j=i*i; j<=n; j+=i)
Prime[j]=false;
}
int main()
{
IsPrime();
int n;
while(cin>>n)
{
cout<<'2';
for(int i=3; i<=n; i++)
if(Prime[i])
cout<<' '<<i;
cout<<endl;
}
return 0;
}