蓝桥杯训练-分解质因数(day16)

一、定义

质因数是指能整除给定正整数的质数。除了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

四、python代码及逐行解析

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

你可能感兴趣的:(蓝桥杯,蓝桥杯,python)