zoukankan      html  css  js  c++  java
  • C/C++查找一定范围内的素数(筛法)

    本文转自于:http://dalu.blogbus.com/logs/37977984.html

    由于一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。
    例如要查找100以内的质数,首先2是质数,把2的倍数去掉;此时3没有被去掉,可认为是质数,所以把3的倍数去掉;再到5,再到7,7之后呢,因为8,9,10刚才都被去掉了,而100以内的任意合数肯定都有一个因子小于10(100的开方),所以,去掉,2,3,5,7的倍数后剩下的都是质数了。
    用程序可以这样解决,引入布尔类型数组a[i],如果i是质数,a[i]=true,否则a[i]=false。那么划掉i可以表示成a[i]=false。

     //找出n以内质数
    void Sieve(int n)
            {
                bool[] a = new bool[n+1];
                for (int i = 2; i <= n; i++)  a[i] = true; 
                for (int i = 2; i <= Math.Sqrt(n); i++)
                {
                    if (a[i])
                        for (int j = i; j*i <= n; j++) a[j * i] = false;
                }
                for (int i = 0; i <= n; i++)
                {
                    if (a[i])
                        Console.Write("{0},",i.ToString());
                }
            } 
    

      如果去掉最后一个用来显示结果的循环的话,运行Sieve(10000000)只要1秒多。

  • 相关阅读:
    springboot maven打包插件
    maven打包指定main入口插件
    团队开发环境一致性性要求
    springboot 在idea中实现热部署
    IDEA 2018.1可用License服务(持续更新)
    IDEA打jar包
    3月18号
    3月17号
    3月16号
    3月13号
  • 原文地址:https://www.cnblogs.com/renyuan/p/3451738.html
Copyright © 2011-2022 走看看