nefu 117素数个数的位数(位数问题)

本文介绍了一种计算小于10^n的素数个数位数的方法,利用素数定理和数学公式,通过编程实现自动计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

Input

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

Output

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

Sample Input

3
7

Sample Output

3
6

Hint

素数定理

分析总结:
<span style="font-size:14px;">首先呢要好好读题,要求的是什么!!!真的要好好读题!其次要求掌握素数定理:定义p(x)是小于x的素数的个数有多少,然后有p(x)/(x/lnx)=1,x越大越趋近于1,然后就是位数问题@@@@,这个问题以前搞过啊要求x的位数就是(int)logx+1呀</span>
<span style="font-size:14px;"></span>
//
//  main.cpp
//  nefu 117 素数个数的位数
//
//  Created by 张嘉韬 on 16/7/25.
//  Copyright © 2016年 张嘉韬. All rights reserved.
//

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const double e=2.718281828459;
int main(int argc, const char * argv[]) {
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        double temp=n/log10(e);
        temp=log10(temp);
        temp=n-temp;
        int r=temp;
        r=r+1;
        cout<<r<<endl;
    }
    return 0;
}
<br /><br />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值