当前位置: 代码迷 >> 综合 >> Leetcode 204. Count Primes (python+cpp)
  详细解决方案

Leetcode 204. Count Primes (python+cpp)

热度:57   发布时间:2023-11-26 07:23:24.0

Leetcode 204. Count Primes

  • 题目
  • 解法1:brutal force(TLE)
  • 解法2:埃氏筛法

题目

在这里插入图片描述

解法1:brutal force(TLE)

这道题目非常简单,但是我在面uber的时候遇到过。首先就是直接暴力求解,根据定义就是质数只能被1和自己整除,当然要考虑到1这个特殊情况。
python代码如下:

class Solution:def countPrimes(self, n: int) -> int:def isprime(num):for i in range(2,num):if num%i==0:return Falsereturn Truecount = 0for i in range(2,n):if isprime(i):count += 1return count

解法2:埃氏筛法

从1到n遍历,假设当前遍历到m,则把所有小于n的、且是m 的倍 数的整数标为和数;遍历完成后,没有被标为和数的数字即为质数。埃氏筛法时间复杂度是nlogn,具体证明查一下吧,有点复杂的
python代码如下:

class Solution:def countPrimes(self, n: int) -> int:if n<=2:return 0prime = [True]*ncount = n-2for i in range(2,n):if prime[i]:for j in range(2*i,n,i):if prime[j]:prime[j] = Falsecount -= 1return count

C++版本如下:

class Solution {
    
public:int countPrimes(int n) {
    if (n<=2) return 0;vector<int> prime(n,true);int count = n-2; //需要除掉1和n本身for (int i=2;i<n;i++){
    if (prime[i]){
    for (int j=2*i;j<n;j+=i){
    if (prime[j]){
    prime[j] = false;count --;}}}}return count;}
};
  相关解决方案