题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入180
输出
2 2 3 3 5
解法:
如果用if:
a, res = int(128), []
for i in range(2, a // 2 + 1):
if a % i == 0:
a = a / i
res.append(i)
print(res)
输出:[2, 4, 8]
如果用while:
a, res = int(128), []
for i in range(2, a // 2 + 1):
while a % i == 0:
a = a / i
res.append(i)
print(res)
输出:[2, 2, 2, 2, 2, 2, 2]
因为while能达到对于同一个质数因子,如2,重复出现的时候,连续每次把它扒出来的效果,所以用while。而if每个数字只会扒一次。
考虑到要输出的格式,用join,所以需要先把int转str,得到如下代码:
a, res = int(input()), []
for i in range(2, a // 2 + 1):
while a % i == 0:
a = a / i
res.append(i)
print(" ".join(map(str,res))+" ")
但这里只输出了能被拆解的合数,如果输入大质数则没有输出,进一步改进,最终代码:
a, res = int(input()), []
for i in range(2, a//2 + 1):
while a % i == 0:
a = a / i
res.append(i)
print(" ".join(map(str, res)) + " " if res else str(a) + " ")
#如果res不为空则输出map(str, res)) + " ",否则输出str(a) + " "。
#a也要str()因为数字a不能和字符串“ ”相加。
最后一行相当于:
if res:
print(" ".join(map(str,res))+" ")
else:
print(str(a)+" ")
补充:
1.map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
2.join()函数:
a.对于字符串:
seq1=‘abcd’
print (’:’.join(seq1))
输出:a🅱️c:d
b.对于list: 注意list当中必须是str类型才能用join
seq1=[‘a’,‘b’,‘c’,‘d’]
print (’:’.join(seq1))
输出:a🅱️c:d