導航:首頁 > 編程語言 > 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盧卡斯素數相關的資料

熱點內容
怎樣減小pdf文件大小 瀏覽:31
和彩雲zip解壓 瀏覽:723
linux查看線程狀態 瀏覽:456
怎麼起文件夾名稱 瀏覽:47
北京交大編譯原理 瀏覽:980
linux執行java腳本 瀏覽:587
全能掃描加密文檔忘記密碼怎麼辦 瀏覽:73
極品飛車ol安卓版為什麼要關服 瀏覽:273
學生伺服器怎麼選 瀏覽:462
mac系統本身編譯器 瀏覽:149
頭條app如何設置橫屏模式 瀏覽:357
clion怎麼使用終端編譯 瀏覽:766
伺服器地址部署到公網 瀏覽:492
新桑塔納安卓大屏導航怎麼拆 瀏覽:382
程序員送給女友的禮物 瀏覽:432
ftp命令行查看文件數量 瀏覽:506
linux查看設備的命令 瀏覽:837
pythongolang學哪個 瀏覽:349
金蝶加密鎖驅動下載 瀏覽:300
python編程基於自然語言處理庫 瀏覽:133