python3分解质因数_Python 质因数分解的研究

用人止太太的Griffindor镇贴!今天刚收到的,什么神仙画画[cry][cry]

分解质因数的方法1:

Drifter_y 提供的方法如下:

def fun():

num=int(input("please input a number:"))

if not isinstance(num,int) or num <0:

print("it is not a correct number")

elif num==1:

print("%d=%d" %(num,num))

else:

while True:                #必须要while循环,质数可能有重复的. 这个条件是有问题的,跳不出去,应该改成while num!=1

for i in range (2,num+1): #保证i能取到num

if num%i==0:

num=int(num/i)

if num==1:         #除到最后的一个质数,num就为1了 这样的条件语句很巧妙地处理了最后一个打出*的问题

print("%d" %i,end='')

else:

print("%d*" %i,end='')

break

一开始看到这个代码,觉得它没有出口,冷静下来一看,它的出口就是i 的for循环到顶。

num在执行过程中会改变,range的范围也会改变,但不影响找质因数。

该执行的本质就是:任何数都可以分解成质因数,一个break相当于抽走了所有2,3,5...的倍数。当执行到底,就跳出while True循环了。

这样一想,我也知道我的代码错误在哪里了。以下是我的代码:

from math import *

num = eval(input('please enter a number:'))

list = []

for i in range(2,num):

k = 1

for j in range(2,i):

if i % j == 0:

k = 0

break

if k ==1:

list.append(i)

#print(list)

while True:

for i in list:

if num % i == 0:

num = num % i

if num == 1:

print('%d'%i,end = '')

else:

print('%d*'%i,end = '')

break

由于我break了,所以for循环永远落到第一个,也就是2....很尴尬了,没有必要把质因数找出来,因为可以重复同一个质因数呀(我今天上午脑子一定是乱码了)。

***比较重要的一点事,range里面的数据类型一定要是int,而不是float

分解质因数的方法2:

我修改之后(结合daxia5398的想法),改为了正确的代码

def fun(num,list = None):

if list is None:

list = []

for i in range(2,num):

while num % i == 0:

list.append(i)

num = int(num / i)

if num > 1:

fun(num)

return list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值