python判斷是否是素數

2021-09-19 23:24:47 字數 1787 閱讀 7339

'''

在python中實現:取出某個數值區間範圍內的所有素數(prime)

素數定義為:對於乙個正整數n,如果除了1和它本身,它再不能被任何正整數整除,則它是素數/質數

定義2是最小的素數

'''import math

import time

def is_prime(num):

return 0 not in [num%sub for sub in range(2,math.ceil(math.sqrt(num)))]

# math.ceil(x)等價於 int(x)+1

# 方法1

start1=time.time()

a=2b=1000000

# p=[p for p in range(a,b) if 0 not in [p%temp for temp in range(2,int(math.sqrt(p))+1)]]

# 對於區間範圍內中的任意乙個整數,遍歷在[2,sqrt(num)]區間中的所有數作為除數

# 得到餘數構成列表,如果0不在列表中,說明當前的數值不能被任何乙個因子整除,則當前的數是質數

# 將p新增到質數列表中

# print(p)

end1=time.time()

print(end1-start1)

# 59.1281213760376

# 方法2:利用python中的filter方法

'''描述

filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回乙個迭代器物件,如果要轉換為列表,可以使用 list() 來轉換。

該接收兩個引數,第乙個為函式,第二個為序列,

序列的每個元素作為引數傳遞給函式進行判,然後返回 true 或 false,最後將返回 true 的元素放到新列表中。

語法以下是 filter() 方法的語法:

filter(function, iterable)

'''start2=time.time()

p2=list(filter(is_prime,range(a,b)))

print(p2)

end2=time.time()

# assert p2==p

print(end2-start2)

# 59.43475270271301

# 方法三:使用python自帶的lambda方法

start3=time.time()

is_prime2=(lambda num:0 not in [num%sub for sub in range(2,math.ceil(math.sqrt(num)))])

p3=filter(is_prime2,range(a,b))

end3=time.time()

print(end3-start3)

# assert p2==p3

# 方法4:當判斷到當前數值不是質數時,提前終止

start4=time.time()

p4=for i in range(a,b):

flag=true

for factor in p4:#如果當前數值除以素數的餘數不為0,則一定是素數,如果除以合數為0,則一定不是素數

if factor>int(math.sqrt(i))+1:

break

elif i%factor!=0:

flag=false

break

if flag:

end4=time.time()

print(end4-start4)

print(p4)

判斷是否是素數

第一次嘗試 define crt secure no warnings include include intisprimenum int num for int i 2 i num i return1 int main else for int i 100 i 200 i return0 此 利用...

python判斷數字是否是超級素數冪

如果乙個數字能表示成 p q,且p是乙個素數,q為大於1的正整數,則此數字就是超級素數冪。param number 測試該數字是否是超級素數冪 return 如果不是就返回 false,如果是就返回 p 和 q 值 例如,輸入125,返回 5,3 impo math def get prime nu...

Python 判斷是否為質數或素數

乙個大於1的自然數,除了1和它本身外,不能被其他自然數 質數 整除 2,3,5,7等 換句話說就是該數除了1和它本身以外不再有其他的因數。首先我們來第乙個傳統的判斷思路 def handlernum num 質數大於 1 if num 1 檢視是否有其他因子 for i in range 2,num...