python【蓝桥杯vip练习题库】BASIC-16分解质因数(数论 质数分解)

试题 基础练习 分解质因数

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  求出区间[a,b]中所有整数的质因数分解。
输入格式
  输入两个整数a,b。
输出格式
  每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=2
3
7=7
8=222
9=33
10=2
5
分析:
分解质因数大家都知道用"短除法",我们拿36这个数来举例子
36/2=18
到这之后更新36为18
18/2 = 9
再更新18为9
9/3 = 3
3是质数,不用更新了,到此结束。

假如是7,直接是质数,那就是7=7
值得一提的是,我们把每次质因数分解的结果存放到一个字典result里面,假如我们分解3到40之间的式子,我们分解到36之后,进行一次运算变成18之后就可以直接把前面的结果从字典里面拿过来。
AC代码:

"""
@Author:Lixiang

@Blog(个人博客地址): https://lixiang007.top/

@WeChat:18845312866

"""
while True:
    try:
        def zhishufenjie(res, n, result):  #res是存储分解质因数的式子,n是当前被分解的数
            for i in range(2, n + 1):
                if n % i == 0:   #如果n能整除i
                    res += str(i)
                    n = n // i
                    if n == 1:
                        return res
                    elif n in result.keys():   #走捷径,假如我们判断36,判断一次到18了,18之前做过了,直接拿过来
                        res += '*'
                        res += result[n]
                        return res
                    else:
                        res += '*'
                        return zhishufenjie(res, n, result)

        min_num, max_num = map(int, input().split())
        result = {}   #result是存储值与其分解质因数的对应关系
        for num in range(min_num,max_num + 1):
            res = ''
            result[num] = zhishufenjie(res,num,result)
        for k,v in result.items():
            s = str(k)+'='+str(v)
            print(s)
    except:
        break


python【蓝桥杯vip练习题库】BASIC-16分解质因数(数论 质数分解)_第1张图片

你可能感兴趣的:(算法)