nefu 117 大数素数个数的位数

素数个数的位数

Time Limit 1000ms

Memory Limit 65536K

description

小明是一个聪明的孩子,对数论有着很浓烈的兴趣。他发现求1到正整数10n 之间有多少个素数是一个很难的问题,该问题的难以决定于n 值的大小。现在的问题是,告诉你n的值,让你帮助小明计算小于10n的素数的个数值共有多少位?

input

输入数据有若干组,每组数据包含1个整数n(1 < n < 1000000000),若遇到EOF则处理结束。

output

对应每组数据,将小于10n 的素数的个数值的位数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。

sample_input

3
7

sample_output

3
6

hint

素数定理

source

 

 

思路:水题一道。正如hint,因为M=10^n内的素数个数  约等于M/ln(M),所以其位数为:log10(M)-log10(ln(M))

即是:log10(10^n)-log10(n* ln(10));

n-log10(n)-log10(ln(10));

 

program:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
 int n;
 while(cin>>n)
 {
   cout<<(int)(n-log10(n*1.0)-log10(log(10*1.0)))+1<<endl;
 }   
}

你可能感兴趣的:(nefu 117 大数素数个数的位数)