分解质因数(正整数分解成质因数的乘积)
1、需求描述:
将一个正整数分解质因数,例如输入90,打印出90=2*3*3*5
2、分析思路:
初步分析,先判断一个数是否是质数,然后将正整数除以该质数,如果能除尽,则刷新正整数,不能除尽,继续寻找下一个质数。如此循环往复,直到正整数变成1
3、按照此思路写出的代码如下:
#定义一个判断是否是质数的函数,返回结果是true or false。def primeNumber(num): if num == 2: return True for i in range(2, num): if num % i == 0: return False return True#将正整数分解成质因数number = int(input("请输入一个正整数:")) print("%d = " % number, end="") i = 2while i <= number: if primeNumber(i) and (number % i == 0): if i == number: print("%d" % i, end="") else: print("%d * " % i, end="") number = number // i i = 2 else: i = i + 1
4、运行结果如下:
请输入一个正整数:90
90 = 2 * 3 * 3 * 5
请输入一个正整数:120000
120000 = 2 * 2 * 2 * 2 * 2 * 2 * 3 * 5 * 5 * 5 * 5
5、算法分析:
这种方法需要不停的判断是否是质数,非常麻烦,遇到数比较大的时候计算速度会非常的慢,因此参考了其他人的代码进行优了优化。
6、优化后的代码:
number = int(input("请输入一个正整数:"))print("%d = " % number, end="")for i in range(2, number): # 从最小的数开始不停的循环做从除法,直到除不尽才进入下一个数 while i != number: if number % i == 0: print("%d * " % i, end="") number = number / i else: breakprint("%d " % number)
这样看,无需进行每次判断是否是质数的运算,代码简洁多了
运行结果:
请输入一个正整数:9999
9999 = 3 * 3 * 11 * 101