zoukankan      html  css  js  c++  java
  • BNU E. 比比谁更虎

    E. 比比谁更虎

    1000ms
    1000ms
    65535KB
     
    64-bit integer IO format: %lld      Java class name: Main
    Font Size:

    beap~高,beap~帅,beap~富,beap~无烦恼。

    一直以来beap都是个霸气侧漏的人,所以他经常和别人比做题的速度,据说下面这个问题,他仅仅用了1分30秒便秒杀了。你能比身为“秒神”的他更虎吗?

    问题如下:
    求L到R之间的素数的个数(包括L,R),
    其中0 < L,R < 10^9,但R-L的值不会超过10^6 。

     

    Input

    处理到文件末尾,每组输入只有一行,包括两个数L,R 。

     

    Output

    每组测试数据的输出只有一个整数,表示素数个数。

     

    Sample Input

    1 5
    5 10

     

    Sample Output

    3
    2

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int vit[32000];
    int num[10000];
    bool flag[1000006];
    int L,R,len;
    int main()
    {
        int i,j;
        memset(vit,0,sizeof(vit));
        vit[1]=0;
        vit[2]=1;
        for(i=3; i<=32000; i++)
        {
            if(i%2)
                vit[i]=1;
            else
                vit[i]=0;
        }
        for(i=3; i<=32000; i+=2)
        {
            if(vit[i])
            {
                for(j=i*2; j<=32000; j+=i)
                    vit[j]=0;
            }
        }
        int cat=0;
        for(i=2; i<=32000; i++)
        {
            if(vit[i])
            {
                num[cat++]=i;
            }
        }
        while(~scanf("%d%d",&L,&R))
        {
            if(R<L) swap(R,L);
            memset(flag,false,sizeof(flag));
            for(int i=0; i<cat && i<=R; i++)
            {
                int dd=L/num[i];
                int ss=num[i]*dd;
                if(ss<L)
                    dd++;
                if(dd==1)
                    dd++;
                for(int j=dd; j*num[i]<=R; j++)
                {
                    flag[j*num[i]-L]=true;
                }
            }
            int cnt=0;
            for(int i=0; i<R-L+1; i++)
            {
                if(!flag[i])
                    cnt++;
            }
            if(L<=1)
                cnt--;
            printf("%d ",cnt);
        }
        return 0;
    }

  • 相关阅读:
    进程与线程的一个简单解释
    如何更优雅的写出你的SQL语句
    SQL 性能优化梳理
    如何写出让同事无法维护的代码?
    Linux配置IP常用命令
    Linux中防火墙命令笔记
    蓝牙技术的工作原理及用途
    别死写代码,这 25 条比涨工资都重要
    搞清这些陷阱,NULL和三值逻辑再也不会作妖
    计算机网络:TCP和UDP的对比
  • 原文地址:https://www.cnblogs.com/lxm940130740/p/3360216.html
Copyright © 2011-2022 走看看