nefu117素数定律

nefu117素数定理

题意:给你一个n,计算1~10^n次方之间有多少个素数,输出该数的位数。

思路:素数定理,小于一个正整数x的素数有多少个,在n越来越大,接近 n / log(n) 计算机用log表示以e为底的对数

所以只要先算出 n / log(n) 在取log 就是位数

n = 10^n

log10( n / log(n) ) = log10(10^n) - log10(log(10^n)) = n - log10(n*log(10)) = n - log10(n) - log10(log(10));

对数运算,相乘等于相加,相除等于想减

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;

int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        double m = n - log10(n) -log10(log(10) );
        printf("%d\n",int(m) + 1 );
    }
    return 0;
}