'''在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...