质因数是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互质。
求出区间[a,b]中所有的整数的质因数分解。
输入:
输入两个整数a,b
输出:
每行输出一个数的分解,形如k=a1*a2*a3....(a1<=a2<=a3...,k也是从小到大的)
输入:
3 10
输出:
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示:先筛出所有素数,然后分解。
数据规模和约定:2<=a<=b<=10000
def solve(res, n, result): #定义函数,接收三个参数:res(用于存储质因数分解结果的字符串),n(需要分解的整数),result(存放已经计算过的质因数分解结果的字典)。
for i in range(2, n+1):
if n % i == 0: #判断n是否能被i整除,如果能整除,则将i添加到res中,并将n除以i。
res += str(i)
n = n // i
if n == 1: #如果n等于1,说明已经找到了所有的质因数,返回res。
return res
elif n in result.keys():#如果n在result字典中,说明之前已经计算过这个数的质因数分解,直接将之前的分解结果添加到res中,并返回res。
res += '*'
res += result[n]
return res
else: #如果n不能被i整除,继续遍历下一个整数。
res += '*'
return solve(res, n, result)
else:
continue
if __name__ == '__main__':
a, b = map(int, input().split()) #输入两个整数
result = {} #创建一个空字典result,用于存放已经计算过的质因数分解结果。
for i in range(a, b+1): #对于每个整数i,调用solve函数计算其质因数分解,并将结果存入result字典中。
res = '' #存放各个因数
result[i] = solve(res, i, result)
# 输出
for k, v in result.items(): #遍历result字典,把每个对应键值转换为字符串格式打印
s = str(k)+ '='+ str(v)
print(s)
运行结果:
3 10
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5