• 【2048】筛法求素数


    Time Limit: 1 second
    Memory Limit: 2 MB

    问题描述
    
    由希腊著名数学家埃拉托斯尼斯提出的所谓“筛法”,是一种高效率的求素数的方法。请用集合的方式来实现这一算法,求2~n(n<=200)之间的素数。
        
     
    

    Input

    一行,一个小于200的整数n。

    Output

    多行,每行输出10个数字,每个数字采用场宽5。

    Sample Input

    40
    
    

    Sample Output

        2    3    5    7   11   13   17   19   23   29
       31   37(换行)
    
    

    【题解】

    先剔除1,然后最小的数字是2,再把2的倍数剔除,接下来最小的数字是3.再把3的倍数剔除。最小的数字是5,再。。

    每次最小的数字就是质数。

    【代码】

    /*
    
    */
    #include <cstdio>
    
    const int maxn = 200;
    
    bool bo[maxn + 10];
    int n;
    
    void input_data()
    {
        scanf("%d",&n);
        for (int i = 1;i <= n;i++) //每个数字都在筛子中
            bo[i] = true;
    }
    
    void get_ans()
    {
        int num = 0,j = n-1,i = 2; //j表示筛子中剩余的数
        bo[1] = false;
        while (j != 0) //如果筛子中还有数就继续晒
            {
                printf("%5d",i);
                num++;
                if (num == 10) //如果已经输出10个了就换行
                    {
                        num = 0;
                        printf("
    ");
                    }
                for (int m = i;m <= n;m++) //剔除i的倍数
                    if ( (bo[m]) && ((m % i) == 0)) //要注意不要重复筛同一个数。不然会死循环。。
                        {
                            bo[m] = false;
                            j--;
                        }
                if (j ==0) break;
                while (bo[i] == false) i++; //找下一个最小的数。
            }
    }
    
    int main()
    {
        input_data();
        get_ans();
        return 0;
    }
    


     

  • 相关阅读:
    JavaScript OOP 思想
    单页界面和 AJAX 模式
    jQuery 的 ready 函数是如何工作的?
    Dojo系列教程
    谈谈javascript语法里一些难点问题(一)
    2014年总结、2015年的小计划--女生程序员小感想
    Android名词解释
    【JS】defer / async
    关于对defer的理解.
    defer和async的区别
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632461.html
Copyright © 2020-2023  润新知