zoukankan      html  css  js  c++  java
  • XMU 1246

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

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

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

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

    #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
    ",ans) ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    后台性能测试不可不知的二三事
    linux下操作mysql
    loadrunner scripts
    反射
    java 读取json
    java 多线程
    python_day11
    python爬虫
    python_day10
    python_day9
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3761669.html
Copyright © 2011-2022 走看看