zoukankan      html  css  js  c++  java
  • CDOJ--1550&&1731

    原题链接:http://acm.uestc.edu.cn/problems.php?vol=15

    分析:首先筛出sqrt(2^31-1)以内的素数,对于给定的区间[L,R],仍然用筛素数的思想把那些是前面筛选出来的素数的倍数的做标记,然后从左到右扫一遍即可。

    How many primes

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #define maxn 100005
     6 using namespace std;
     7 int prime[maxn],t;
     8 bool ans[1000005];
     9 bool flag[maxn]={false};
    10 void selprime()
    11 {
    12     t=0;
    13     for(int i=2;i<=100000;i++)
    14     {
    15         if(!flag[i])
    16         {
    17             prime[t++]=i;
    18             for(int j=1;j*i<=100000;j++)
    19             flag[i*j]=true;
    20         }
    21     }
    22 }
    23 void solve(int m,int n)
    24 {
    25     for(int i=0;i<t;i++)
    26     {
    27         if(prime[i]*2>n)break;
    28         int j=m/prime[i];
    29         if(j*prime[i]<m)j++;
    30         j=max(j,2);
    31         for(;j*prime[i]<=n;j++)
    32         {
    33             ans[j*prime[i]-m]=false;
    34         }
    35     }
    36 }
    37 int main()
    38 {
    39     int m,n;
    40     selprime();
    41     while(~scanf("%d%d",&m,&n))
    42     {
    43         if(m==1)m++;
    44         memset(ans,true,sizeof(ans));
    45                     solve(m,n);
    46                     int res=0;
    47         for(int i=0;i<=n-m;i++)
    48         {
    49             if(ans[i])res++;
    50         }
    51         printf("%d
    ",res);
    52     }
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    并查集基础练习
    HDU1232——畅通工程
    二分答案——划分数列
    二分答案——收入计划
    动态规划练习题(2)
    动态规划程序设计2
    动态规划练习题(1)
    0/1背包
    P5024 保卫王国[倍增+dp]
    UVA11424 GCD
  • 原文地址:https://www.cnblogs.com/i-love-acm/p/3231163.html
Copyright © 2011-2022 走看看