素数密度

正常暴力就是每个数判断是否为素数,但这样会超时,所以要用埃氏筛,因为每一个数都可以唯一拆解为若干个素数乘积,所以只要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(j
top-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);
} `

posted @ 2025-02-10 20:24  十柒*  阅读(4)  评论(0编辑  收藏  举报