Python练习题002

【问题描述】

由数学基本定理可知:任何一个大于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))

最终种结果显示,有一个点运行时间过长.(仅个人学习记录用)

有一种简便的方法:直接除质数(从小到大)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值