zoukankan      html  css  js  c++  java
  • POJ3978 Primes【素数筛选+前缀和】

    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 4075   Accepted: 1579

    Description

    A pretty straight forward task, calculate the number of primes between 2 integers. 

    Given 2 integers A ≤ B < 105 what’s the number of primes in range from A to B inclusive. 

    Note: A prime number is a positive integer greater than 1 and is divisible by 1 and itself only. For N to be prime it is enough to test the divisibility of numbers less than or equal to square root of N.

    Input

    As many as 1000 lines, each line contains 2 integers A and B separated by a space. Input is terminated when A = B = -1 (Do not process this line).

    Output

    For every line in input – except for the last line where A = B = -1 - print the number of prime numbers between A and B inclusive.

    Sample Input

    0 9999
    1 5
    -1 -1

    Sample Output

    1229
    3

    Source



    问题链接POJ3978 Primes

    题意简述:参见上文。

    问题分析:用Eratosthenes筛选法筛选素数,然后计算素数数量的前缀和,根据输入的数据范围做个减法即可。

    程序说明:(略)

    参考链接:(略)


    AC的C++语言程序如下:

    /* POJ3978 Primes */
    
    #include <iostream>
    #include <string.h>
    #include <math.h>
    
    using namespace std;
    
    const int N = 100000;
    int prefixsum[N+1];
    
    // Eratosthenes筛选法+计算前缀和
    void sieveofe(int n)
    {
        memset(prefixsum, 0, sizeof(prefixsum));
    
        prefixsum[0] = prefixsum[1] = 1;
        for(int i=2; i<=sqrt(n); i++) {
            if(!prefixsum[i]) {
                for(int j=i*i; j<=n; j+=i)  //筛选
                    prefixsum[j] = 1;
            }
        }
    
        prefixsum[0] = 0;
        for(int i=1; i<=n; i++)
            if(prefixsum[i])
                prefixsum[i] = prefixsum[i - 1];
            else
                prefixsum[i] = prefixsum[i - 1] + 1;
    }
    
    int main()
    {
        sieveofe(N);
    
        int a, b;
    
        while(cin >> a >> b && (a != -1 || b != -1))
            cout << prefixsum[b] - prefixsum[(a - 1 < 0) ? 0 : a - 1] << endl;
    
        return 0;
    }





  • 相关阅读:
    带下拉子菜单的导航菜单
    如何使用myFocus插件制作焦点图效果
    将博客搬至CSDN
    《转》二进制与三进制的那些趣题
    二叉树遍历 (前序 层次 == 深度 广度) 层次遍历
    数组全排列 knuth 分解质因数
    堆排序
    双向快速排序
    二路归并排序
    字符串的排列
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563693.html
Copyright © 2011-2022 走看看