zoukankan      html  css  js  c++  java
  • 【CodeVS3223】素数密度

    Description

    给定区间[L, R](L <= R <= 2147483647,R-L <= 1000000),请计算区间中素数的个数。

    Input

    两个数L和R

    Output

    一行,区间中素数的个数

    Sample Input

    2 11

    Sample Output

    5

    HINT

    详见试题

    题解

    筛出2-sqrt(r)中的素数,然后用这些数筛l-r中的素数

    pri存2-sqrt(r)中的素数

    dpri 存r-l中的素数(向左平移l个)

    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    bool pri[50000000];
    bool dpri[1000010];
    
    long long l,r,q,cnt,ans,q2;
    int main()
    {
    	memset(pri,true,sizeof(pri));
    	memset(dpri,true,sizeof(dpri));
    	cin>>l>>r;
    	pri[1]=false;
    	for (int i=2;i<=ceil(sqrt(r));i++){
    		if (pri[i]){
    			q=i;
    			while (q<ceil(sqrt(r))){
    				q+=i;
    				pri[q]=false;
    			}
    			for (q2=l;q2%i&&q2<r;q2++);
    			while (q2<=i)q2+=i;
    			while(q2<=r){
    				dpri[q2-l]=false;
    				q2+=i;
    			}
    		}
    	}
    	for (int i=l;i<=r;i++) if (dpri[i-l]) ans++;
    	cout<<ans;
    }
    

      

  • 相关阅读:
    第14周总结
    第十三周总结
    第十二周总结
    第十一周总结
    第十次助教小结
    第九次小结-关注的助教
    第八次点评
    助教总结
    助教小结13
    助教小结12
  • 原文地址:https://www.cnblogs.com/liumengyue/p/5225770.html
Copyright © 2011-2022 走看看