博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NEFU_117素数个数的位数
阅读量:5157 次
发布时间:2019-06-13

本文共 979 字,大约阅读时间需要 3 分钟。

题目传送门:

Problem : 117

Time Limit : 1000ms

Memory Limit : 65536K

description

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

input

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

output

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

sample_input

37

sample_output

36

hint

素数定理

素数定理:素数有无穷多个,能估计出小于一个正实数x的素数有多少个,并用PI(x)来表示,这就是素数定理。随着x的增长,PI(x)/(x/ln(x)) == 1.

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

位数公式得知:[log10(n/ln(n))]+1

#include 
#include
#include
#include
#include
#include
using namespace std;char a[100];int main() { int n; while (cin >> n) { int res = (int) (n - log10(n) - log10(log(10))); //memset(a, 0, sizeof(a)); cout << res + 1<< endl; } return 0;}

转载于:https://www.cnblogs.com/Tovi/p/6194844.html

你可能感兴趣的文章
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
Java中对List集合排序的两种方法
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
MySQL学习之备份
查看>>
不同程序语言的注释和变量要求
查看>>