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

    题目链接:

    https://leetcode-cn.com/problems/count-primes/comments/

    解题思路:

    1、传统方法不行的,超时

    2、使用见埃拉托色尼筛法

    如果要实现筛法,需要一个O(n)的数组来存储每一个数是不是素数,暂定为true,筛选,把不是素数的定为false,最终数组里为true的就是所有的素数了。如何筛选?p是素数,那么2p, 3p……一定不是素数。事实上,如果筛的是2p, 3p……那么考虑 2*3这个数,它被2筛了一次,又被3筛了一次,没有必要。可以这样筛选:对于每一个素数p,筛掉p^{2}, p^{2}+p, p^{2} + 2p……
    并不需要对[2, n]的每一个数进行筛选,只需要对[2, sqrt{n}]进行筛选,即可筛出所有不是素数的数

     1 class Solution {
     2     public int countPrimes(int n) { //暴力算法是过不了的qwq
     3         //这个要用筛法实现
     4         boolean[] isPrime = new boolean[n];
     5         int result = 0;
     6         
     7         for (int i = 2; i < n; i++) {
     8             isPrime[i] = true; //先初始化为true   
     9         }
    10         
    11         for (int i = 2; i * i < n; i++) { //这一次for循环找出所有不是素数的数(也就是说被筛掉了)
    12             if (!isPrime[i]) {
    13                 //既然已经被筛掉了就不用管了
    14                 continue;
    15             }
    16             else {
    17                 for (int j = i * i; j < n; j += i) {
    18                     //由于i现在是一个素数, 那么i的平方一定不是素数,i^2 + i; i^2 + 2i也一定不是素数
    19                     isPrime[j] = false;
    20                 }                
    21             }
    22         } //所有不是素数的数已经全部筛掉
    23        
    24         //计算剩余的素数个数
    25         for (int i = 2; i < n; i++) {
    26             if (isPrime[i] == true) {
    27                 result++;
    28             }
    29         }
    30         return result;
    31     }
    32    
    33 }
     1 class Solution {
     2     public int countPrimes(int n) {
     3         int count=0;
     4         for(int i=2;i<n;i++)
     5         {
     6             int flag=0;
     7             for(int j=2;j<=Math.sqrt(i);j++)
     8             {
     9                 if(i%j==0)
    10                 {
    11                     flag=1;
    12                 }
    13             }
    14             if(flag==0)
    15                 count++;
    16         }
    17         return count;
    18     }
    19 }
  • 相关阅读:
    ubuntu16.04添加开机启动任务
    Elasticsearch-5.0.0移植到ubuntu16.04
    转:解决npm install慢的问题
    解决virtualbox装ghost xp装驱动时报portcls.sys蓝屏的问题
    git文件迁移到新架构
    ubuntu16.04文件形式安装mongodb
    linux启动流程
    启动WAMPSERVER出现计算机中丢失 MSVCR110.dll
    socket编程的网络协议
    PHP7的新特性
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/11240948.html
Copyright © 2011-2022 走看看