#44305: python 詳解


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-03-11 12:39:29
a626. 6. Prime Directive -- HP CodeWars2007 | From: [123.192.228.253] | 發表日期 : 2024-11-22 22:45

這題對 python 來說,有幾個比較關鍵的步驟要處理

 

找質數

建表,取得 1000 以內所有的質數列表,考慮到測資可能有數筆,每次都要重新計算有哪些質數很浪費時間。

你可以自己徒手打,或複製貼上,一共有 168 個。

也可以讓程式自己求這些質數,你可以使用試除法,遍歷 1000 以內的所有數,並檢查該數是否能被任一一個不為 1 且比他小的數整除。

又或是使用質數篩法,詳細自行搜尋關鍵字「埃拉托斯特尼質數篩法」

 

輸出格式處理

根據題意,每列最多輸出 5 個質數

你可以土法煉鋼,一個一個數,數到第 5 個數字才輸出換行符,然後歸零,進入下個循環

 

或更深入利用 python 的特性

參考官方文檔中關於 itertools 的介紹,最下方有關於 more-itertools 的範例,找到一個叫 grouper 的函數

根據說明,這個函數可以將一個可迭代元素根據傳入的值進行切割

你不需要導入 more-itertools,實際上你也導不了,因為這不是內建的

但你也不需要把這個函數完全複製貼上過來,我們用不到他的完全體

 

觀察這個東西,他有三種模式,分別為 full、strict、ignore 三種模式,這邊我們需要的是 full 模式,而使用 full 模式需要使用一個叫 zip_longest 的函數,這個函數需要導入 itertools 才能使用

把我們真正區要的東西拿出來就行了

def grouper(iterable, n):
from itertools import zip_longest
iterators = [iter(iterable)] * 5
return zip_longest(*iterators)

 

怎麼用它就看個人造化

 

 
ZeroJudge Forum