读书人

nefu117素数定律

发布时间: 2013-10-18 20:53:13 作者: rapoo

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;}


读书人网 >编程

热点推荐