204. 计数质数 | Count Primes

Count the number of prime numbers less than a non-negative number, n.

Example:

Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.


统计所有小于非负整数 的质数的数量。

示例:

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

424ms
 1 class Solution {
 2     func countPrimes(_ n: Int) -> Int {
 3         if n < 2 {return 0}
 4         //筛选法
 5         var count = 0
 6         //创建具有默认值的数组
 7         var flag = Array(repeating: false, count: n)
 8         var val:Int = Int()
 9         for i in 2..<n
10         {
11             if flag[i] == false
12             {
13                 count += 1
14                 var j:Int = 1
15                 val = j*i
16                 while(true)
17                 {
18                     j += 1
19                     val = j*i
20                     if(val < n)
21                     {
22                         flag[val] = true
23                     }
24                     else
25                     {
26                         break
27                     }
28                 }
29             }
30         }
31         return count
32     }
33 }


84ms

 1 class Solution {
 2     func countPrimes(_ n: Int) -> Int {
 3         guard n > 2 else { return 0 }
 4         var sieve = [Bool](repeating: true, count: n)
 5         var count = n / 2
 6         var i = 3
 7
 8         while i * i < n {
 9             if sieve[i] {
10                 var j = i * i
11
12                 while j < n {
13                     if sieve[j] {
14                         count -= 1
15                         sieve[j] = false
16                     }
17                     j += 2 * i
18                 }
19             }
20             i += 2
21         }
22
23         return count
24     }
25 }


112ms

 1 class Solution {
 2     func countPrimes(_ n: Int) -> Int {
 3         guard n >= 3 else { return 0 }
 4         var primes = [Bool](repeating: true, count: n)
 5         var count = n/2
 6         var i = 3
 7         while i <= Int(Double(n).squareRoot()) {
 8             if primes[i] {
 9                 var j = i
10                 while i*j < n {
11                     if primes[i*j] {
12                         count -= 1
13                         primes[i*j] = false
14                     }
15                     j += 2
16                 }
17             }
18             i += 2
19         }
20         return count
21     }
22 }

原文地址:https://www.cnblogs.com/strengthen/p/9745292.html

时间: 2024-08-12 16:09:01

204. 计数质数 | Count Primes的相关文章

leetcode 204/187/205 Count Primes/Repeated DNA Sequences/Isomorphic Strings

一:leetcode 204 Count Primes 题目: Description: Count the number of prime numbers less than a non-negative number, n 分析:此题的算法源码可以参看这里,http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes 代码: class Solution { public: int countPrimes(int n) { // 求小于一个数n的素数个

204.计数质数

感觉挺简单的 结果掉坑了 超时警告 class Solution { public int countPrimes(int n) { int temp = 0; for(int i = 0 ;i < n ;i++){ if(isPrimeNumber(i)){ temp++; } } return temp; } public boolean isPrimeNumber(int n) { if(n == 1||n == 0) return false; if(n==2||n==3) { retu

[LeetCode] 204. 计数质数

题目链接:https://leetcode-cn.com/problems/count-primes/ 题目描述: 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 思路: 质数就是除了 1 和本身找不到其他能除尽的数,思路请看题目的提示! 思路一:暴力法(超时)(大家可以学习一下 for ... else 的用法, 一般配合 break 使用) class Solution: def cou

204计数质数

题目:统计所有小于非负整数 n 的质数的数量. 来源:https://leetcode-cn.com/problems/count-primes/ 法一:自己的超时代码 思路:和官方的方法事实上一样,但是代码没有用标记0 1的方法,导致很费时.删除每个质数的倍数时,都需要判断是否存在,如果是用标记0 1的方法不会出现这种问题,要学会这个切片技巧. import math class Solution: def countPrimes(self, n: int) -> int: if n in [

LeetCode:Count Primes - 统计质数数量

1.题目名称 Count Primes(统计质数数量) 2.题目地址 https://leetcode.com/problems/count-primes/ 3.题目内容 英文:Count the number of prime numbers less than a non-negative number, n. 中文:统计正整数n以内(不含n本身)质数的数量 4.一个TLE的方法 从1到n,考察每个数字是否为质数.这个方法由于花费时间较长,不能满足题目中对时间的要求. 一段实现此方法的Jav

LeetCode 第 204 题 (Count Primes)

LeetCode 第 204 题 (Count Primes) Description: Count the number of prime numbers less than a non-negative number, n. 计算小于 N 的素数的个数.这道题目比较简单.但是想提高计算效率与需要费点脑筋. 判断一个数字 n 是不是素数的简单方法是 用 n 去除 2,3,4,-,n?1,如果都不能整除就说明这个数是素数. 按照这个思路可以写个简单的函数. bool isPrime(int n)

[LeetCode]Count Primes

题目:Count Primes 统计1-n的素数的个数. 思路1: 通常的思想就是遍历(0,n)范围内的所有数,对每个数i再遍历(0,sqrt(i)),每个除一遍来判断是否为素数,这样时间复杂度为O(n*sqrt(n)). 具体实现不在贴代码,过程很简单,两重循环就可以解决.但是效率很差,n较大时甚至会花几分钟才能跑完. 思路2: 用埃拉特斯特尼筛法的方法来求素数,时间复杂度可以达到O(nloglogn). 首先开一个大小为n的数组prime[],从2开始循环,找到一个质数后开始筛选出所有非素数

Count Primes

package cn.edu.xidian.sselab.hashtable; /** *  * @author zhiyong wang * title: Count Primes * content: * Description: *  * Count the number of prime numbers less than a non-negative number, n. * */public class CountPrimes { //自己想出来的,不过有几个地方一开始出错了:(1)

Leetcode problem-204 Count Primes 题解

Leetcode problem-204 Count Primes Count the number of prime numbers less than a non-negative number, n. 题解:这道题如果对每个小于n的数都进行判断是否为素数并计数会超时,因此采用筛法来解这题.建一个数组,从2开始, 把其倍数小于N的都删掉. class Solution { public: int countPrimes(int n) { vector<int>arr(n,1); int s