众所周知,任何合数(既非质数的自然数)都可以被分解为多个质数的乘积。
例:
所以我们要先找出所有质数
最终代码在最下面。
先导入模块:
import easygui
设置整除函数:
def z (x, y):
if(x % y == 0):
return True
else:
return False
开始主函数:
寻找质数:
初始化变量:(list指所有质数的列表)
list = [2]
ant = False
从3开始到99999实验所有单数是不是质数:
for x in range(3, 99999, 2):
ant = False
for y in range(0, len(list), 1):
if(z(x, list[y])):
ant = False
break
else:
ant = True
if(ant):
list.append(x)
print("\r{}".format(repr(x / 1000) + "%"),end="")
分解部分:
print("\r{}".format("加载成功!"),end="")
while True:
list1 = []
num = easygui.enterbox("请输入一个自然数:","分解质因数")
ant = 0
while num != 1: #从这里开始分解,前面的都是UI部分。
for i in range(0,len(list),1):
a = list[i]
if z(int(num),int(a)):
ant = a
list1.append(ant)
num = int(num) / int(ant) #从这里结束分解,后面的都是UI部分。
easygui.msgbox(list1,"结果", "我知道了")
if not(easygui.ynbox("是否继续?",["Yes", "No"])):
break
完整代码部分:
import easygui
def z (x, y):
if(x % y == 0):
return True
else:
return False
list = [2]
ant = False
for x in range(3, 99999, 2):
ant = False
for y in range(0, len(list), 1):
if(z(x, list[y])):
ant = False
break
else:
ant = True
if(ant):
list.append(x)
print("\r{}".format(repr(x / 1000) + "%"),end="")
print(list)
print("\r{}".format("加载成功!"),end="")
while True:
list1 = []
num = easygui.enterbox("请输入一个自然数:","分解质因数")
ant = 0
while num != 1:
for i in range(0,len(list),1):
a = list[i]
if z(int(num),int(a)):
ant = a
list1.append(ant)
num = int(num) / int(ant)
easygui.msgbox(list1,"结果", "我知道了")
if not(easygui.ynbox("是否继续?",["Yes", "No"])):
break