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
疫情中的英国,
加油!