a010: 因数分解
这篇教学会示范 ZeroJudge 基础题库“a010: 因数分解”的解题过程。
题目需求
因数分解就是把一个数字,切分为数个质数的乘积,如 12=2^2 * 3。
题目链接:a010: 因数分解
解答
这题除了基本的因数分解,重点在于分解后如果有重复的因数,需使用“几次方”的方式来表现。首先使用进行“因数分解”,并使用一个字典 result 记录,将取得的因数设为 key,次数设为 value。
num = int(input()) # 將輸入的文字轉成數字
result = {} # 建立空字典 result
while True: # 不斷重複
for i in range(2, num+1): # 取出 2~num 的每個數字
if num%i == 0: # 如果 num 除以 i 能整除
if i in result:
result[i] = result[i] + 1 # 使用 result 記錄 i 的次數
else:
result[i] = 1 # 如果 result 還沒有 key 等於 i
num = num//i # num 等於 num 除以 i 取整數 ( 單純用除以會變成 float )
break
if num == 1: # 如果 num 等於 1,表示取值結束
break
print(result)
程序执行后,如果输入的数字为 13880,会看见因数为三个 2、一个 5 和一个 347。
已经能分解出因数以及因数的数量后,再根据题目,印出指定的格式,当中建立一个 output 变数作为输出的文字,使用 for 循环将 result 变数的内容转变成指定的格式,并存入 output 变数里,最后使用 [:-2] 的方式去除最后两个字元,就是最后的答案。
while True:
try:
num = int(input())
result = {}
while True:
for i in range(2, num+1):
if num%i == 0:
if i in result:
result[i] = result[i] + 1
else:
result[i] = 1
num = num//i
break
if num == 1:
break
output = '' # 建立 output 變數為空字串
for i in result: # 取出 result 的每個 key 與 value
if result[i] != 1: # 如果 key 的 value 不為 1,表示需要使用「次方」表現
output = f'{output}{i}^{result[i]} * ' # 使用次方表現
else:
output = f'{output}{i} * ' # 單純只有一個數字
output = output[:-2] # 去除結尾的空白與星號
print(output)
except:
break
微信扫码关注
抖音扫码关注