方法
素数n可以用n%i是否=0判断 (i从2到sqrt(n)向下取整) 复杂度O(nsqrt(n) )
也可以用筛法,从小到大枚举所有数,对于每一个素数筛去它的所有倍数,剩下的就都是素数 复杂度(nloglogn)
- 2是素数,筛去2的倍数的数
- 筛完所有2的倍数的数,3没有被筛除,所以3是素数,筛去所有3的倍数的数
- 5没有被筛除,所以5是素数…以此类推
代码
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000001
int prime[MAXN];
int num=0;
bool p[MAXN]={0};
void find_prime()
{
for(int i=2;i<MAXN;i++)
{
if(p[i]==0)
{
prime[num++]=i;
for(int j=i+i;j<MAXN;j+=i)
{
p[j]=1;
}
}
}
}
int main()
{
find_prime();
int M,N;
cin>>M>>N;
int times=0;
for(int i=M-1;i<N;i++)
{
cout<<prime[i];
times++;
if(times%10!=0&&i<N-1)
cout<<" ";
else
cout<<endl;
}
}