蓝桥杯算法提高VIP-质因数2

该题目第一次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开始除,把除数放入一个数组或者直接输入,然后再把商赋值给被除数,直到无法整除为止

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值