NEFU 117 素数个数的位数


定义:Π(x)为 1 到 x的素数个数。

素数定理:随着x的增长,Π(x)/(x/ln(x))= 1

推论:令pn是第n个素数,其中n是正整数,那么pn~n ln n


题意:求小于10的n次方的素数的个数共有多少位,n < 1e9

题解:这道题的数据量很大,因为10的n次方很大,会溢出,不能直接运算,该题只是求素数分布值的位数,考虑到使用素数定理,因为n/ln n 与素数分布值Π (n)随着n的增大越来越近,值的位数更不会出现误差,所以求n/ln n的位数即可。根据位数公式,得知【ln(n/ln n)】+ 1就是该问题的解。


代码如下

#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
	int out;
	double n,m;
//	double e = 2.71828;
	while(cin >> n){
		m = double (n - log10(n) - log10(log(10)));
		cout << int(m) + 1 << endl;
	}
} 


猜你喜欢

转载自blog.csdn.net/pk__pk/article/details/81040994
117