蓝桥杯练习系统分解质因数(Python)

问题描述

求出区间[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

算法思路

一些基本概念

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='')

## 注意
输出格式一定按照标准来,输出结果的等号左右没有空格,如果有空格,系统会判错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值