zoukankan      html  css  js  c++  java
  • 【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;
    }
    


     

  • 相关阅读:
    Linux基础命令题(ps/ls + grep)
    Operator Overloading in C++
    C++中class和struct的区别
    poj1110double vision搜索
    poj1321棋盘递归搜索
    vim窗口分割/切换
    xclipmore about copy&paste命令行粘贴
    [转载]怎样花两年时间去面试一个人
    最优二叉查找树optimalBSTC++实现
    vim复制粘贴——系统剪贴板
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632461.html
Copyright © 2011-2022 走看看