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

XMU 1246

时间:2014-05-31 04:37:27      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   tar   

http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1246

求区间内素数个数,经典问题,区间长度10^6,数的取值最多能到10^12(此题范围稍小)

用筛法搞出[2,根号b]范围内的素数,用这些素数再去筛[a,b]

一个吐血的trick,1不是素数

bubuko.com,布布扣
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std ;
typedef long long ll ; 
bool prime[1500000] ;
bool prime1[1500000] ;
int main()
{
    int t ;
    scanf("%d",&t) ;
    while(t--)
    {
        ll a,b ;
        scanf("%lld%lld",&a,&b) ;
        for(ll i=0 ;i*i<=b ;i++)prime[i]=true ;
        for(ll i=0 ;i<=b-a ;i++)prime1[i]=true ;
        for(ll i=2 ;i*i<=b ;i++)
        {
            if(prime[i])
            {
                for(ll j=2*i ;j*j<=b ;j+=i)prime[j]=false ;
                for(ll j=max(2LL,(a+i-1)/i)*i ;j<=b ;j+=i)prime1[j-a]=false ;
            }
        }
        int ans=0 ;
        for(ll i=0 ;i<=b-a ;i++)
            if(prime1[i])ans++ ;
        if(a==1)ans-- ;
        printf("%d\n",ans) ;
    }
    return 0 ;
}
View Code

 

XMU 1246,布布扣,bubuko.com

XMU 1246

标签:c   style   class   blog   code   tar   

原文地址:http://www.cnblogs.com/xiaohongmao/p/3761669.html

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