zoukankan      html  css  js  c++  java
  • NEFU 117

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=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

    题解:

    这道题目可以说是比较有趣的数学题,相比于算法,考得更多的应该是数学上的内容吧。

    因为不可能真的去遍历1到10^n一个一个判断是否为素数,然后求出个数,在求位数,显然TLE,所以换其他思路;

    首先,根据素数定理,可知π(x) ≈ n / ln(n),向本题中,问的是位数,那用约等于问题就不大,两者相差没到10倍就可以说位数上是一样的;

    故根据题意,就有:

    那么,如何求这个数的位数呢,也很简单用log(10,x)+1即可:

    AC代码:

     1 #include<cstdio>
     2 #include<cmath>
     3 int n;
     4 int main()
     5 {
     6     while(scanf("%d",&n)!=EOF)
     7     {
     8         double ans=n-log10(n*log(10))+1;
     9         printf("%d
    ",int(ans));
    10     }
    11 }
  • 相关阅读:
    python---自定义分页类
    python---正则中的(?P<name>group)
    学习windows编程 day6 之模拟记事本
    学习windows编程 day5 之按键消息
    some websit
    android/iphone/windows/linux声波通讯库
    无线点餐系统
    android实现弧形进度表盘效果
    与Sevice实现双向通信
    android code bbs for developer
  • 原文地址:https://www.cnblogs.com/dilthey/p/7536800.html
Copyright © 2011-2022 走看看