【问题描述】 由数学基本定理可知:任何一个大于1的非素数整数(即合数)都可以唯一分解成若干个素数的乘积。编写程序,从控制台读入一个合数(合数的大小不会超过int数据类型表示的范围),求这个合数可以分解成的只出现一次的素数。例如合数1260分解成素数乘积为:2*2*3*3*5*7,2和3出现两次,5和7出现一次,所以求得的结果为5和7。 【输入形式】 从控制台输入一个合数。 【输出形式】 在标准输出上按照由小到大的顺序输出分解后的只出现一次的素数,各素数之间以一个空格分隔,最后一个素数后也可以有一个空格。若没有只出现一次的素数,则什么都不输出。 【输入样例】 6154380 【输出样例】 5 29 131 【样例说明】 输入的合数为6154380,其分解成的素数乘积为:2*2*3*3*3*3*5*29*131,其中2出现两次,3出现4次,5、29和131只出现一次,所以只输出5、29、131。 【评分标准】 共有5个测试点。 def IsPrime(n): k=0 for i in range(2,int(n/2)+1): if n % i == 0: k = 1 if k == 1: return 0 else: return 1 numb=int(input()) #第一题 divisor=[] for l in range(int(numb/2),1,-1): if numb % l == 0 and IsPrime(l): divisor.append(l)#可以分解成的所有质数 #########print(divisor)#test decomposition=[] i=0 while numb not in divisor: numb=numb/divisor[i] decomposition.append(divisor[i]) i=i+1 if i==len(divisor): i=0 decomposition.append(int(numb)) ####print(decomposition)#test decomposition.sort() divi=[] [divi.append(x) for x in decomposition if decomposition.count(x)==1 ] print(" ".join(str(i) for i in divi)) 最终种结果显示,有一个点运行时间过长.(仅个人学习记录用)
有一种简便的方法:直接除质数(从小到大)。