我的問題如下:我想創建一個程序,它接受大于 0 且小于 21 的整數,并且這些整數之間用一個空格分隔。然后我想創建一個列表,其中素數將被附加而不進行任何更改,非素數將被拆分為元素,這些元素將是素數。輸入: 3 6 7 12輸出: [3,2,3,7,2,2,3]這就是我想出的。當我嘗試使用上述輸入運行程序時,對于 12,它僅輸出 2 和 3,而沒有另一個 2。這里可能有什么問題?l_prime = [2,3,5,7,11,13,17,19]l = []disposable = Noneiterate = input().split()for i in iterate: a = int(i) for j in range (0,len(l_prime)): disposable = j if a == l_prime[j]: l.append(l_prime[j]) else: if a % l_prime[disposable] == 0: l.append(l_prime[disposable]) a = a / l_prime[disposable] else: if a <= 1: break else: disposable += 1l我將不勝感激任何幫助!提前致謝!
1 回答

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
你基本上只需要改變這個if聲明
if a % l_prime[disposable] == 0:
到while循環中,以便您可以添加重復的質因數:
while a % l_prime[disposable] == 0:
但代碼還可以進一步簡化。首先,您根本不必對素數進行特殊處理;它們只是具有單個素因數的數字。此外,您可以直接迭代 的元素,l_prime而不是使用索引,特別是該disposable變量根本沒有任何用途。鑒于要測試的素數數量很少,您甚至可能會放棄break
for a in map(int, iterate):
for p in l_prime:
while a % p == 0:
l.append(p)
a //= p
添加回答
舉報
0/150
提交
取消