该题目第一次ac代码如下:
def panduan(n): #判断是否为质数 for i in range(2,n): if n % i ==0: return False return True a = [] n = int(input()) temp=n restart=True # 定义变量使得循环遍历2到n+1 while restart: restart = False for i in range(2,n+1): if temp%i==0: if panduan(i): #如果可以整除并且为质数,添加到列表并且重新遍历 a.append(i) temp=int(temp/i) #将整除后的结果放入temp中重新 restart =True break for i in a: print(i,end=" ") #打印 print() print(len(a)) #输出
接着发现似乎好像不需要判断是否为质数,因为每次都是从2重新遍历到n,至于为什么我搞不太清楚,应该是它每次都是从2开始整除,这样就会使得它接下来一定是奇数,然后从三开始,把奇数中不是质数的也去掉了,然后果然ac了,代码如下:
a = []
n = int(input())
temp=n
restart=True
while restart:
restart = False
for i in range(2,n+1):
if temp%i==0:
a.append(i)
temp=int(temp/i)
restart =True
break
for i in a:
print(i,end=" ")
print()
print(len(a))
后来我又想,是不是不需要创建数组,这样能进一步提高时空效率,然后就是最后调整出来的代码了:
n = int(input()) temp=n sum =0 restart=True while restart: restart = False for i in range(2,n+1): if temp%i==0: print(i,end=" ") temp=int(temp/i) restart =True sum+=1 break print() print(sum)
总结:我自己一直对质因数的概念搞不清,其实就是把这个数写成n个最小的质数相乘的形式。所以搞了二十分钟还是没打出来,思路应该是每次都从2开始除,把除数放入一个数组或者直接输入,然后再把商赋值给被除数,直到无法整除为止