zoukankan      html  css  js  c++  java
  • 204. 计数质数

    题目

    统计所有小于非负整数 n 的质数的数量。
    示例:

    输入: 10 
    输出: 4  
    解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 
    

    解题思路

    采用排除法的思想
    1:比2大的偶数一定不是质数
    2:从2开始的任意一个数x,x乘一个>=2的整数得到的数字一定不是质数

    步骤

    1.首先把一半的偶数排除掉count = n/2; 这里并不会把2这个特立给排除,因为1代替了2当质数(或者说1代替2被排除)
    2. 排除3 * 3 3 * 5 3 * 7 ..................(为啥从3开始,因为2的倍数的是偶数,在第一步就已经全部排除了)
    3. 接着排除5 * 5 5 * 7 ...................

    代码

    class Solution {
        public int countPrimes(int n) {
            if(n<=2)
                return 0 ;
            //①把偶数的排掉——————由思路1知
            //count指质数个数
            int count = n/2;
            //true表示不是质数 , false表示是质数
            boolean[] flag = new boolean[n];
    
            //②因为count=n/2已经把偶数给排除掉了,所以这个i=i+2,排除剩下奇数中不是质数的就行
            for(int i = 3 ; i<=Math.sqrt(n) ;i+=2){
                //已经判断为质数了,continue判断下一个数字
                if(flag[i])
                    continue;
                //例如: 3*3 3*5 3*7 ........这些数字肯定不是质数 ————由思路2知
                for(int j = i*i;j<n;j+=i*2){
                  
                    if(!flag[j]){
                        //不是质数
                        flag[j]=true;
                        //排除,质数数量-1
                        count--;
                    }
                }
            }
            return count;
        }
    }
    
  • 相关阅读:
    Mysql Explain 详解
    TP5和TP3.2的区别
    Http协议详解
    TCP协议三次握手与四次挥手详解
    一些常规面试问题
    计算机网络常识
    队列与栈的区别
    面向对象
    在浏览器中输入 www.baidu.com 后执行的全部过程
    SVN在ubuntu的安装和使用
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/13398476.html
Copyright © 2011-2022 走看看