LeetCode 204 计数质数 Python3

1、暴力 超时

class Solution:
    def countPrimes(self, n: int) -> int:
        # 暴力,O(n*n^(1/2))
        def IsPrimes(n):
            for i in range(2,n//2+1):
                if n%i == 0:
                    return False
            return True
        # 2以下无    
        if n <= 2 :
            return 0
        else:
            count = 1
        
        for i in range(3,n,2):
            if IsPrimes(i):
                count += 1
        
        return count

 

class Solution:
    def countPrimes(self, n: int) -> int:

        # 只与质数匹配
        def IsPrimes(n):
            for num in m:
                if n%num == 0:
                    return False
            return True
        # 2以下无    
        if n <= 2 :
            return 0
        else:
            m = set()
        
        for i in range(3,n,2):
            if IsPrimes(i):
                m.add(i)
        
        return len(m)+1

2、标记,将所有当前质数的倍数做标记

class Solution:
    def countPrimes(self, n: int) -> int:
        # 空间换时间 将所有的质数的倍数标记为1                   
        # 2以下无    
        if n <= 2 :
            return 0
        else:
            m = [0 for i in range(n)]
            count = 0

        for i in range(2,n):
            if m[i]==0:
                count += 1
                m[i] = 1
                # 如果是当前质数的倍数,记录
                for j in range(i*i,n,i):
                    m[j] = 1
        return count

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值