您的位置:首页 > 编程语言 > Python开发

LeetCode--Count Primes(素数个数)Python

2017-12-03 16:35 453 查看
题目:

计算n以内的素数个数。

解题思路:

1、首先考虑直接判断n以内的每个数是否为素数。再对结果进行求和。判断某个数是否为素数的方法,之间判断该数能否整除从2到sqrt(n)的数字。若能则是素数,否则不是素数。复杂度为n*sqrt(n)。但在LeetCode会超时。

代码(Python):

class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
if n==0:
return 0

def IsPrime(n):
sqrt_n = int(n**0.5)
for i in range(2,sqrt_n+1):
if (n%i)==0:
return 0
return 1

count = 0

for i in range(2,n):
count+=IsPrime(i)

return count

2、改变判断某数是否为素数的方式,判断该数能否整除从2到sqrt(n)的素数。在LeetCode也会超时
class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
Prime = []
flag = 0
for i in range(2,n):
if Prime==[]:
Prime.append(i)
continue
for j in range(len(Prime)):
if Prime[j]*Prime[j]>i:
flag = 0
break
if i%Prime[j]==0:
flag = 1
break

if flag==1:
flag = 0
continue
else:
Prime.append(i)
return len(Prime)

3、在网上查找到的解题思路,降低了复杂度。厄拉多塞筛法。可以AC

链接:http://blog.csdn.net/github_39261590/article/details/73864039

代码(Python):

class Solution(object):
def countPrimes(self, n):
"""
:type n: int
:rtype: int
"""
if n<2:
return 0
output = [True]*(n-1)
output[0:1] = [False]*2
sqrt_n = int(n**0.5+1)
for i in range(sqrt_n):
if output[i]:
output[i*i:n:i]=[False]*len(output[i*i:n:i])

return sum(output)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: