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;
        }
  • 相关阅读:
    Ubuntu16.04 + OpenCV源码 + Qt5.10 安装、配置
    DML和DQL
    初识MySql
    表单校验
    使用jQuery操作DOM
    jQuery中的事件与动画
    jQuery选择器
    初识jQuery
    JavaScript对象及初识OOP
    JavaScript操作DOM对象
  • 原文地址:https://www.cnblogs.com/jiezai/p/11221618.html
Copyright © 2011-2022 走看看