知道一個數字是不是質數的方法是:
如果 n 不是質數,那麼 n 一定有一個小於等於 n 的因數。
所以我們可以用下面的程式判斷輸入的 n 是否為質數:
def is_prime(n):
for i in range(2, n):
if n % i == 0: # 整除,i 是 n 的因數,所以 n 不是質數。
return False
return True # 都沒有人能整除,所以 n 是質數。
接著回到原題:
輸入一數字 n,印出 2 到 n 之間的質數。
這代表我們要做四件事:
- 得到輸入值 n;
- 跑一個迴圈產生 2 到 n 之間的數字;
- 對迴圈的每個值,判斷它是不是質數;
- 如果是,印出來。
前兩件事很簡單:
n = int(input('Input a number: ')) # 得到輸入值 n。
for i in range(2, n + 1): # 產生 2 到 n 的數字。
pass
# TODO: 做 3. 和 4.
第三件事其實就是我們前面的那個函式。所以我們直接用它:
n = int(input('Input a number: ')) # 得到輸入值 n。
for i in range(2, n + 1): # 產生 2 到 n 的數字。
i_is_prime = is_prime(i) # 判斷 i 是否為質數。
第四件事情要用一個 if 來做:
n = int(input('Input a number: ')) # 得到輸入值 n。
for i in range(2, n + 1): # 產生 2 到 n 的數字。
i_is_prime = is_prime(i) # 判斷 i 是否為質數。
if i_is_prime: # 如果是,印出來。
print(i)
這樣就完成了。
完整的程式:
def is_prime(n):
for i in range(2, n):
if n % i == 0: # 整除,i 是 n 的因數,所以 n 不是質數。
return False
return True # 都沒有人能整除,所以 n 是質數。
n = int(input('Input a number: ')) # 得到輸入值 n。
for i in range(2, n + 1): # 產生 2 到 n 的數字。
i_is_prime = is_prime(i) # 判斷 i 是否為質數。
if i_is_prime: # 如果是,印出來。
print(i)
請問如果要把輸出的因數用列表表示,並且從大排到小需要怎麼打?