admin 管理员组

文章数量: 1086866

python对整数进行因数分解

今天讨论的是如何将一个正整数分解质因数。例如:输入36,打印出36=2*2*3*3。

1.首先要清晰两个概念,要知道什么是质数,如何进行分解质因数?质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。分解质因数是把一个正整数用质因数相乘的形式表示出来。

2. 逻辑分析:对一个正整数k进行分解质因数,应先找到一个最小的质数j,然后按下述步骤完成:

(1)如果这个质数j恰等于k,则说明分解质因数的过程已经结束,打印出即可。(2)如果k=j1*j2……*jn,但k能被j整除,则应打印出k得值,并用k除以j的商,作为新的正整数j, 重复执行第一步。 (3)如果k=j1*j2……*jn不能被j整除,则用j+1作为j得值,重复执行第一步。

根据以上思路程序进行开发设计,使用现在流行的Python程序为例,对“如何将一个正整数分解质因数的问题”进行学习讨论。

3.程序代码:

# -*-coding:utf-8 -*-num=int(input("请输入一个大于1的正整数字:"))

ZS_num_list=[]#创建一个空列表用作存入输入数字所在范围的所有质数

chushu_list=[]#创建除数列表

shang_list=[]#创建商列表

for i in range(2,num+1): #提取质数

j=2

for j in range(2,i):#余数为零时表示不是质数,并跳出进入上一级for循环,对下一个数字进行取余判断,

# 当余数不为零时,跳过if下的break,执行else的语句,将质数累加到ZS_num_list中

if i%j==0:

break

else:

ZS_num_list.append(i)#将质数加到列表中

#print(ZS_num_list)#测试打印质数列表

def ZYS(num):#创建质因数函数

for n in ZS_num_list: #遍历质数列表,从最小的质数开始

if num==n: #(第一步)如果数恰等于n时,将n加到商列表中

shang_list.append(n)

else:##如果数不等于n时,余数为0,则n为最小质数

if num%n==0 and num!=n:

chushu_list.append(n) #将n加到除数列表中

shang_list.append(int(num/n)) #将当前运算的商加到商列表中

return ZYS(int(num/n)) #将当前运算的商加到商加入ZYS函数中重复执行,

# 直到只能运行到第一步,

# 即商为质数时停止

ZYS(num)

#print(chushu_list)

#print(shang_list)

print("它分解质因数为:")

shang_len=len(shang_list) #商列表中的数字数量

print(num,"= ",end="") #end=""表示不换行

for chushu_len in chushu_list:

print(chushu_len,"* ",end="")

print(shang_list[shang_len-1])

程序运行结果:

请输入一个大于1的正整数字:180

它分解质因数为:

180=2*2*3*3*5

可以自己计算验证是否正确:

验证计算图

4. 程序分析:

(1)建立质数、除数及商的列表数

a.创建一个空列表用作存入输入数字所在范围的所有质数

b.创建除数列表

c.创建商列表

(2)根据输入数字建立质数范围数据,提取质数到列表中。

a.余数为零时表示不是质数,并跳出进入上一级for循环,对下一个数字进行取余判断,

b.当余数不为零时,判断是否为质数,并将质数累加到质数表中

3)使用建立的数据范围进行穷举,获取符合要求的数据

a.遍历质数列表,从最小的质数开始

如果数恰等于n时,将n加到商列表中如果数不等于n时,余数为0,则n为最小质数b.将n加到除数列表中

将当前运算的商加到商列表中将当前运算的商加到商加入ZYS函数中重复执行,直到只能运行到第一步,即商为质数时停止

最后执行程序:

相信各位对于关于将一个正整数分解质因数的逻辑思维有了更清晰的理解,根据此课题进行进一步拓展,可以使用其他方法进行设计。感谢您读完了子甲园的分享,欢迎留言一起聊聊天,共同探讨各种逻辑思维和Python开发设计。

本文标签: python对整数进行因数分解