Roba number(素數篩)
輸出的素數。由數論知識可知,每個合數的最小的大於1的因數是素數,且該素數在之間。因此我們可以用素數篩取的合數。
因爲.
所以我們只需要找到之間的素數,然後用這些素數去篩就行了。
時間複雜度:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int N=4e7+5;
#define mst(a) memset(a,0,sizeof a)
bool a[N]={0};
int x=3e7,y=4e7;
void fun(){
int i,j;
for(i=2;i<=6500;i++){
if(!a[i]){
for(j=i*i;j<=6500;j+=i)
a[j]=1;
for(j=x/i*i;j<=y;j+=i) //x/i*i 是爲了取最接近a的且是i的倍數的數.
a[j]=1;
}
}
}
int main(){
fun();
for(int i=x;i<=y;i++){
if(!a[i]) printf("%d\n",i);
}
return 0;
}