精品一区二区三区影院在线午夜_天天躁日日躁狠狠躁AV麻豆_国产午夜福利短视频_中文字幕乱偷无码AV先锋蜜桃_久久精品一二区东京热_国产成人亚洲日韩欧美久久久,国产成人精品久久一区二区三区

python獲取質數

質數概念

質數是指在大于1的自然數中,除了1和它本身以外不再有其他因數的自然數。

題目

統計所有小于非負整數 n 的質數。

代碼

# -*- coding: utf-8 -*-

'''

質數概念:只能被1和自身整除的數字,叫做質數

'''

import math

import time

class Solution:

''' 暴力的方法,將其對每一個比其小的數進行取余運算

如果任一余數為0。則一定不是質數,否則就是質數。(數字1除外)

'''

def getPrimes(self, n: int) -> list:

Primes_list = []

for i in range(2, n+1):

sign = True

for j in range(2, i):

if i % j == 0:

sign = False

break

if sign:

Primes_list.append(i)

return Primes_list

'''

優化暴力方法,我們可以發現,假如一個數為 9 ,那么其二分之一(4.5)后的數都可以不用進行計算,

因為肯定是有余的 。事實上情況會比這更好一些:對正整數 n ,如果用 2 到 √n 之間(包含邊界)的

所有整數去除,均無法整除,則 n 為質數。

'''

def getPrimes2(self, n: int) -> list:

Primes_list = []

for i in range(2, n+1):

sign = True

for j in range(2, int(math.sqrt(i))+1):

if i % j == 0:

sign = False

break

if sign:

Primes_list.append(i)

return Primes_list

'''

如果 x 是質數,那么大于 x 的 x 的倍數 2x,3x,...一定不是質數。

因此,可以進行將質數標記為1,非質數標記為0.

'''

def getPrimes3(self, n: int) -> list:

isPrimes = n*[1]

Primes_list = []

for i in range(2, n+1):

if isPrimes[i-1]:

Primes_list.append(i)

for j in range(i*i,n+1,i):

isPrimes[j-1]=0

return Primes_list

if __name__ == "__main__":

s = Solution()

time1 = time.time()

result = s.getPrimes(10000)

print(len(result), time.time()-time1)

time2 = time.time()

result2 = s.getPrimes2(10000)

print(len(result2), time.time()-time2)

time3 = time.time()

result3 = s.getPrimes3(10000)

print(len(result3), time.time()-time3)

結果

1229 0.2709805965423584

1229 0.007999658584594727

1229 0.001996278762817383

汕尾市| 四川省| 阜阳市| 麻栗坡县| 腾冲县| 科技| 三门峡市| 余江县| 彭山县| 都江堰市| 南漳县| 定襄县| 定兴县| 桐城市| 阿克苏市| 天水市| 临武县| 马鞍山市| 赫章县| 酉阳| 宁河县| 利辛县| 三门县| 石楼县| 施甸县| 桃江县| 济源市| 综艺| 姚安县| 东光县| 营山县| 中西区| 军事| 偏关县| 江阴市| 上高县| 光泽县| 西峡县| 奉化市| 廉江市| 甘孜县|