46,WA1,2,6,7,9,10
  • 板块P1835 素数密度
  • 楼主_cyh_
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/26 20:44
  • 上次更新2023/11/2 17:58:22
查看原帖
46,WA1,2,6,7,9,10
690121
_cyh_楼主2023/9/26 20:44

代码

#include<bits/stdc++.h>
using namespace std;
bool pp[400000],p[10000010];
void fp(long long,long long);
int num=0;
int main(){
    long long n,m;
    cin>>n>>m;
    fp(n,m);
    cout<<num;
    return 0;
}void fp(long long a,long long b){
	long long k=ceil(sqrt(a));
    for(int i=2;i<=k;i++){                                     //找出小于根号 a 的所有素数 
    	if(!pp[i]){
    		for(int j=i*2;j<=k;j+=i)
    		pp[j]=1;
		}
	}//for(int i=2;i<=k;i++)cout<<pp[i]<<" ";cout<<endl;
	for(int i=2;i<=k;i++){                                    //初步筛选所求区间中的素数 
		if(!pp[i]){
			long long j=a;while(j%i!=0)j++;
			for(;j<=b;j+=i)if(j!=i)p[j-a]=1;
			//for(long long i=a;i<=b;i++)cout<<p[i-a]<<" ";cout<<endl;
		}
	}if(a==1)a=2;//特判 a = 2 的情况 
	for(long long i=a;i<=b;i++){
		if(!p[i-a]){
			num++;                                            //计数器加一 
			for(long long j=i*2;j<=b;j+=i)p[j-a]=1;
		}
	}
}

求大佬指导

2023/9/26 20:44
加载中...