zoukankan      html  css  js  c++  java
  • HDU 5901 Count primes 大素数计数

    **题意:**计算1~N间素数的个数(N<=1e11) **题解:**题目要求很简单,作为论文题,模板有两种 \(O(n^frac{3}{4} )\),另一种lehmer\(O(n^frac{2}{3})\) [link:https://zh.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0%E8%AE%A1%E6%95%B0%E5%87%BD%E6%95%B0](https://zh.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0%E8%AE%A1%E6%95%B0%E5%87%BD%E6%95%B0)
    /** @Date    : 2016-11-18-13.59
    * @Author : Lweleth (SoungEarlf@gmail.com)
    * @Link : https://github.com/
    * @Version :
    */
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <utility>
    #include <vector>
    #include <map>
    #include <set>
    #include <string>
    #include <stack>
    #include <math.h>
    #include <queue>
    //#include<bits/stdc++.h>
    #define LL long long
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;

    const int INF = 0x3f3f3f3f;
    const int N = 1e6+2000;
    using namespace std;
    //high[i] means pi(n/i),low[i] means pi(i)
    LL high[340000];
    LL low[340000];
    LL n;
    LL fun()
    {
    LL i,m,p,s,x;
    for(m = 1; m * m <= n; m++)
    high[m] = n/m-1;
    for(i = 1;i <= m; i++)
    low[i] = i-1;
    for(p = 2; p <= m; p++)
    {
    if(low[p] == low[p-1])
    continue;
    s = min(n/(p*p),m-1);
    for(x = 1; x <= s; x++)
    {
    if(x*p <= m-1)
    high[x] -= high[x*p] - low[p-1];
    else
    high[x] -= low[n/(x*p)] - low[p-1];
    }
    for(x = m; x >= p*p; x--)
    low[x] -= low[x/p] - low[p-1];
    }
    }

    int main()
    {
    while(cin>>n)
    {
    fun();
    cout << high[1] << endl;
    }
    }
  • 相关阅读:
    第十六节:类与对象基本概念
    dedecms源码分析:(1)index.php
    第十二节:控制结构foreachbreakcontinueswitch
    PHP的输出缓冲区(转)
    C 结构体小结
    指针参数在内存中的传递
    C typedef用途小结
    C语言考试2 题目整理
    MinGW 环境下 给hello.exe 自定义一个图标
    JavaEE程序设计快速入门小结
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/6087136.html
Copyright © 2011-2022 走看看