導航:首頁 > 編程語言 > python盧卡斯素數

python盧卡斯素數

發布時間:2023-07-13 01:07:06

『壹』 python求200以內的素數

# 求200以內的素數
primes = []
for n in range(2,201):
for i in range(2,int(n**(1/2))+1):
if n % i == 0:
break
else:
primes += [n]
print(primes)

程序縮進如圖所示

『貳』 python求素數的個數

求素數本質上的演算法還是:除了1和它本身之外的數都不能整除的數。

在網上看到了一種用一行就解決的代碼:

" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0])
對這段代碼分解,最後一段列表生成式[y for y in range(2,x) if x%y == 0]這個就是核心演算法y是從2到x-1的數,x只要能對y整除,配上前面的if not,就是,x不能被2到x-1的數整除,再看前面一段,x for x in range(2,100) 其實就是讓x從2到100的取值。我們這假設題目就是求100內的素數。其實代碼到這就得出結果了,只要在這些代碼外面加上[]就是一個列表生成式了:

[x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0]]
那麼為什麼還加上了" ".join("%s" % 。。。)這段代碼呢?其實只是格式化美觀罷了,"%s" %是一種字元串格式化的語法, 基本用法是將值插入到%s佔位符的字元串中,join() 方法用於將序列中的元素以指定的字元連接生成一個新的字元串。
下面是結果:

'2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97'
這樣解析出來是個字元串還不能分割,所以我重新改了一下:

a = (" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x%y == 0])).split()
list1 = []
for item in (a):
list1.append(int(item))
print(list1)
split()把字元串解析成列表,然後給列表每一項都轉化成數字。
在數學里,我們還有種判斷素數的簡化方法:即y的取值范圍是2到x的平方根+1

import math
(" ".join("%s" % x for x in range(2,100) if not [y for y in range(2, int(math.sqrt(x))+1) if x%y == 0])).split()
下面是一種正常的演算法:
import math
num = []
i = 2
for i in range(2,100):
j = 2;
for j in range(2,int(math.sqrt(i)+1)):
if (i%j==0):
break;
else:
num.append(i)
print(num)

閱讀全文

與python盧卡斯素數相關的資料

熱點內容
庫房管理系統源碼 瀏覽:59
安卓應用多為什麼會卡 瀏覽:10
php程序員工作職責 瀏覽:306
程序員可以轉行做運維嗎 瀏覽:323
如何檢測到伺服器埠是否通 瀏覽:851
linuxsed正則 瀏覽:109
linux安裝gz文件 瀏覽:357
linux如何卸載編譯的軟體 瀏覽:929
高三解壓活動視頻 瀏覽:780
如何把伺服器卡爆 瀏覽:949
餓了么java程序員 瀏覽:960
python編譯時找不到路徑 瀏覽:910
jpg轉換pdf軟體 瀏覽:103
php讀取json文件 瀏覽:866
螺桿壓縮機的功率計算 瀏覽:74
谷輪壓縮機c 瀏覽:338
蘋果app如何復制到另一個手機 瀏覽:834
javasession超時 瀏覽:831
易金通app怎麼更改手機號 瀏覽:493
plc數控編程的方法 瀏覽:989