码迷,mamicode.com
首页 > 其他好文 > 详细

LightOJ - 1197 素数筛

时间:2018-01-13 11:04:03      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:mes   log   print   code   markdown   ase   std   nal   bit   

深夜无事可干啊

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+11;
typedef long long ll;
bitset<maxn> isnprime;
int prime[maxn];
int sai(int n){
    isnprime[0]=isnprime[1]=1;
    for(int i = 2; i*i <= n; i++){
        if(!isnprime[i]){
            for(int j = 2*i; j <= n; j+=i){
                isnprime[j]=1;
            }
        }
    }
    int cnt=0;
    for(int i = 1; i <= n; i++) if(!isnprime[i]) prime[cnt++]=i;
    return cnt;
}
bitset<maxn> vis;
int main(){
    int cntt=sai(maxn-1);
    int T,kase=0; scanf("%d",&T);
    while(T--){
        int a,b; scanf("%d%d",&a,&b);
        int cnt=0;
        if(b<maxn) for(int i = a; i <= b; i++){
            cnt+=1-isnprime[i];
        }
        else{
            for(int i = 0; i <= b-a; i++) vis[i]=0;
            for(int i = 0; i < cntt && prime[i]*prime[i]<=b; i++){
                ll k = a/prime[i];
                if(k*prime[i]<a) k++;//internal 
                for(ll j = k*prime[i]; j <= b; j+=prime[i]) vis[j-a]=1;
            }
            for(ll i = a; i <= b; i++) cnt+=1-vis[i-a];
        }
        printf("Case %d: %d\n",++kase,cnt);
    }
    return 0;
} 

LightOJ - 1197 素数筛

标签:mes   log   print   code   markdown   ase   std   nal   bit   

原文地址:https://www.cnblogs.com/caturra/p/8278254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!