LeetCode - 求小于n的素数的个数
没有提交成功,超时了。性能不行。
class Solution: def getPrimes(self, n: int) -> list: if n in [0, 1, 2]: return [] elif n in [3]: return [2] elif n in [4, 5]: return [2, 3] elif n in [6, 7]: return [2, 3, 5] elif n in [8, 9, 10]: return [2, 3, 5, 7] elif n <= 100: return [2, 3, 5, 7] + [j for j in range(11, n, 2) if j % 3 != 0 and j % 5 != 0 and j % 7 != 0] elif n <= 10000: srt = int(n ** 0.5) srt = srt if srt % 2 == 0 else srt + 1 primes_srt = self.getPrimes(srt) primes = [] i = srt + 1 while i < n: is_prime = True for p in primes_srt[1:]: if i % p == 0: is_prime = False break if is_prime: primes.append(i) i += 2 return primes_srt + primes else: raise ValueError('n must be less than or equal to 10000!') def countPrimes(self, n: int) -> int: if n in [0, 1, 2]: return 0 elif n <= 10000: return len(self.getPrimes(n)) elif n <= 100000000: srt = int(n ** 0.5) srt = srt if srt % 2 == 0 else srt + 1 primes_srt = self.getPrimes(srt) cnt = 0 i = srt + 1 while i < n: is_prime = True for p in primes_srt[1:]: if i % p == 0: is_prime = False break if is_prime: cnt += 1 i += 2 return len(primes_srt) + cnt else: raise ValueError('n must be less than or equal to 100000000!')