素数密度
正常暴力就是每个数判断是否为素数,但这样会超时,所以要用埃氏筛,因为每一个数都可以唯一拆解为若干个素数乘积,所以只要r^0.5以内的素数都求出来,然后在[l,r]区间内把合数筛掉,剩下的都是素数了
`#include<stdio.h>
include
include
include<stdlib.h>
include<string.h>
include
include<bits/stdc++.h>
using namespace std;
int lst[50007]={2},top=1;
int flag[1000007]={0};
void pre(int l){
for(int i=3;i<l;i++){
for(int j=0;j<top;j++){
if(i%lst[j]0){
break;
}
if(jtop-1){
lst[top]=i;
top++;
}
}
}
return;
}
int main(){
int l,r,sum=0;
scanf("%d %d",&l,&r);
l+=(l1);
pre(50000);
if(l<=r){
for(int i=l;i<=r;i++){
for(int j=0;j<top;j++){
if(i%lst[j]0&&i!=lst[j]){
flag[i-l]=1;
break;
}
}
}
for(int i=0;i<=r-l;i++){
if(flag[i]==0){
sum++;
}
}
}
printf("%d",sum);
} `