• AOJ 7.Redraiment猜想


    Redraiment猜想


    Description

    redraiment在家极度无聊,于是找了张纸开始统计素数的个数。
    设函数f(n)返回从1->n之间素数的个数。
    redraiment发现:

    f(1) = 0
    f(10) = 4
    f(100) = 25

    满足g(m) = 17 * m2 / 3 - 22 * m / 3 + 5 / 3
    其中m为n的位数。
    他很激动,是不是自己发现了素数分布的规律了!
    请你设计一个程序,求出1->n范围内素数的个数,来验证redraiment是不是正确的,也许还可以得诺贝尔奖呢。^_^


    Input

    输入包括多组数据。
    每组数据仅有一个整数n (1≤n≤10,000,000)。
    输入以0结束


    Output

    对于每组数据输入,输出一行,为1->n(包括n)之间的素数的个数


    Sample Input

    1
    10
    65
    100
    0


    Sample Output

    0
    4
    18
    25


    思路:
    这道题好,卡空间卡时间,还有掌握素数筛选的方法。

    循环到 j < sqrt(MAX)+1/i 就好了

    还有一个menset()的用法:
    头文件是,string.h 参照样例,可以将所有bool数组化为true

    /*
        Title: AOJ 7
        Date: 2016-9-24
        Author: pengwill
    */
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #define MAX 10000000
    bool a[MAX+1]={true};
    int count[MAX+1]={0}; 
    using namespace std;
    int main()
    {
        memset(a,true,sizeof(a));//初始化变量 
        int i=0,j=0,n=sqrt(MAX)+1;
        a[1] = false;
        a[2] = true;
        for(i=2;i<=n;i++)  //筛选循环
           for(j=2;j<=MAX/i;j++)
               a[j*i]=false;
        for(i = 1;i<=MAX;i++){//记录个数 
            count[i] = count[i-1] + a[i];
        } 
        int number;//输出数据 
        while(scanf("%d",&number)!=EOF &&number){
            printf("%d
    ",count[number]);
        } 
        return 0;
    }
  • 相关阅读:
    布隆过滤器(Bloom Filter) 未完待续
    [面试]future模式
    R语言入门(2)-数据对象
    R语言入门(1)-初识R语言
    [面试] Java GC (未整理完)
    [面试]StringBuilder StringBuffer源码粘贴(并非源码分析, 请绕道)
    [面试]synchronized
    [面试]volatile类型修饰符/内存屏障/处理器缓存
    [面试]死锁-最简单的死锁demo
    [面试]Actor模型
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367276.html
Copyright © 2020-2023  润新知