zoukankan      html  css  js  c++  java
  • 统计所有小于非负整数 n 的质数的数量,埃拉托斯特尼筛法

    素数的定义:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。

    1.暴力算法:

    令i=2; 当i<n的时候,我们循环找出2-i的质数,即让i%(2~i-1),如果flag为true,则i为质数,计数器++;否则跳出,i++;进行下一次判断

     public int countPrimes(int n) {
        int i=2;
    int count=0;
    boolean flag=true;
    while (i<n){
    for (int j = 2; j <i ; j++) {
    if(i%j==0){
    flag=false;
    break;
    }
    }
    if(flag) {
    count++;
    }
    flag=true;
    i++;
    }
    return count;
    }

    2.采用埃拉托斯特尼筛法,先创建一个长度为n的boolean数组,默认值都为false;我们直接从2开始判断,之后用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去…。每次都筛选出 i*j<n的数,置为ture,这样可以减少很多不必要的运算

    时间复杂度:O(n*lglgn)

        public static int countPrimes(int n) {
            boolean []nums=new boolean[n];
            int count=0;
            for (int i = 2; i <n ; i++) {
                if(nums[i]==false){
                    count++;
                    for (int j = 2; i*j <n ; j++) {
                        nums[i*j]=true;
                    }
                }
            }
            return count;
        }
  • 相关阅读:
    c++计算器后续(1)
    第七次作业
    第六次作业之计算器图形界面(之骗分)
    C++课堂作业二之反转链表
    第五次作业(计算器第三步之文件输入输出)
    ARP详解和ARP攻击
    网络基础-端口
    网络基础-子网掩码
    Informatica ODBC的使用
    linux7 grub配置文件 linux6 grub配置文件
  • 原文地址:https://www.cnblogs.com/jiezai/p/11221618.html
Copyright © 2011-2022 走看看