Leetcode Count Primes Python 求小于给出值所有的质数(素数) | 函数内嵌函数直接调用

Leetcode 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.

题目大意: 找出小于n的所有质数的个数。这就是个数学问题。

先给定义什么是质数?

质数(Primenumber),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数的数)。——via维基百科

先上一个暴力解法,每次都循环判断。 亲测超时。Leetcode直接给了一个499979的输入值。 我也是醉醉的。
这里函数内嵌的函数直接用函数名调用就可以了。

class Solution:
    def countPrimes(self, n: int) -> int:
        def primes_number(m):
            for i in range(2,m):
                if (m%i) == 0:
                    return False
            else:
                return True
        
        res = 0
        for i in range(2,n):
            if primes_number(i):
                res += 1
        return res

再看优化的问题。思想是从最小的素数开始,排除这个素数所有的倍数。
在这里插入图片描述

if n < 3:
    return 0

result = [1] * n
result[0] = result[1] = 0

for i in range(2,int(n**0.5)+1):
    if result[i] == 1:
        for j in range(i+i, n , i):
            result[j] = 0
return sum(result)

15/05/2020
疫情中的英国,
加油!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值