• 2016 ACM/ICPC Asia Regional Shenyang Online && hdoj5901 Count primes Lehmer


    Count primes

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

    Problem Description
    Easy question! Calculate how many primes between [1...n]!
     
    Input
    Each line contain one integer n(1 <= n <= 1e11).Process to end of file.
     
    Output
    For each case, output the number of primes in interval [1...n]
     
    Sample Input
    2 3 10
     
    Sample Output
    1 2 4
     
    Source
    2016 ACM/ICPC Asia Regional Shenyang Online
     
    粘来的板子。。留着用
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 #define MAXN 110
     5 #define MAXM 10010
     6 #define MAXP 666666
     7 #define MAX 1000010
     8 #define LL long long int
     9 #define clr(arr) memset(arr,0,sizeof(arr))
    10 #define setbit(ar, i) (((ar[(i) >> 6]) |= (1 << (((i) >> 1) & 31))))
    11 #define chkbit(ar, i) (((ar[(i) >> 6]) & (1 << (((i) >> 1) & 31))))
    12 #define isprime(x) (( (x) && ((x)&1) && (!chkbit(arr, (x)))) || ((x) == 2))
    13 
    14 LL dp[MAXN][MAXM];
    15 unsigned int arr[(MAX>>6)+5]={0};
    16 int len=0,primes[MAXP],counter[MAX];
    17 
    18 void SS(){
    19     setbit(arr,0);
    20     setbit(arr,1);
    21     for(int i=3;(i*i)<MAX;i++,i++)
    22     if (!chkbit(arr,i)){
    23         int k=i<<1;
    24         for(int j=i*i;j<MAX;j+=k)
    25             setbit(arr,j);
    26     }
    27     for(int i=1;i<MAX;i++){
    28         counter[i]=counter[i-1];
    29         if (isprime(i)) primes[len++]=i,counter[i]++;
    30     }
    31 }
    32 
    33 void init(){
    34     SS();
    35     for(int n=0;n<MAXN;n++)
    36     for(int m=0;m<MAXM;m++){
    37         if (!n) dp[n][m]=m;
    38         else dp[n][m]=dp[n-1][m]-dp[n-1][m/primes[n-1]];
    39     }
    40 }
    41 
    42 LL phi(LL m,int n){
    43     if (!n) return m;
    44     if (primes[n-1]>=m) return 1;
    45     if (m<MAXM&&n<MAXN) return dp[n][m];
    46     return phi(m,n-1)-phi(m/primes[n-1],n-1);
    47 }
    48 
    49 LL Lehmer(LL m){
    50     if (m<MAX) return counter[m];
    51     int s=sqrt(0.9+m);
    52     int y=cbrt(0.9+m);
    53     int a=counter[y];
    54     LL res=phi(m,a)+a-1;
    55     for(int i=a;primes[i]<=s;i++)
    56         res=res-Lehmer(m/primes[i])+Lehmer(primes[i])-1;
    57     return res;
    58 }
    59 
    60 int main(){
    61     init();
    62     LL n;
    63     while(scanf("%I64d",&n)!=EOF) printf("%I64d
    ",Lehmer(n));
    64     return 0;
    65 }
     
  • 相关阅读:
    springmvc介绍
    mybatis中的动态sql应用
    mybatis中表的关联
    mybatis分页
    聚类评估指标系列(二):准确率和F值
    混淆矩阵,准确率,召回率,F-score,PR曲线,ROC曲线,AUC
    聚类评估指标系列(一):标准化互信息NMI计算步骤及其Python实现
    numpy.where() 用法详解
    互信息Mutual Information
    转:Prewitt算子、Sobel算子、canny算子、Lapacian算子
  • 原文地址:https://www.cnblogs.com/cshg/p/5888407.html
Copyright © 2020-2023  润新知