问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
算法思路
一些基本概念
1.分解质因数
每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。
2.质数(素数)
质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数
判断一个数x是否是素数的时候,只需要计算这个数能不能被[2,x/2]之间的数整除即可
解题思路
把给定区间内的数分为两类,一类是素数,一类不是素数。所以需要一个判断是否为素数的函数,返回True或False
对素数,直接等于自身即可
不是素数,需要找出它的质因数,即既能被该数整除又是素数的数
针对题目要求需要考虑,该数=某个相同质因数的乘积。如8=222 ,18=233
一次从分解质因数的函数中返回一个结果,再循环中执行分解质因数的函数,用中间值(=原数)除以该结果,相除的结果=1时结束循环。
参考代码
```python
def sushu(x):
# 素数就是大于1的自然数中,除了1和它本身以外不再有其他因数
# range左闭右开
for i in range(2, x // 2 + 1):
if x % i == 0:
return False
else:
continue
return True
# print(sushu(4))
# 执行一次返回一个值或者不返回
def fenjie(x):
# yinshu = []
for i in range(2, x+1):
if x % i == 0 and sushu(i):
return i
# yinshu.append(i)
# print(i)
# return yinshu
# print(fenjie(8))
a, b = input().split()
num = []
for i in range(int(a), int(b)+1):
num.append(i)
vis = [0] * len(num)
for i in range(len(num)):
if sushu(num[i]):
vis[i] = 1
for i in range(len(vis)):
if vis[i] == 1:
print('{0}={1}'.format(num[i], num[i]))
else:
temp = []
x = num[i]
while 1:
m = fenjie(x)
temp.append(m)
x = x // m
if x == 1:
break
print(num[i],'=',end='',sep='')
for j in range(len(temp)):
if j == len(temp) - 1:
print(temp[j])
else:
print(temp[j],'*',end='',sep='')
## 注意
输出格式一定按照标准来,输出结果的等号左右没有空格,如果有空格,系统会判错