蓝桥杯python组--基础训练---3、将一个正整数分解质因数,例如:输入90,输出2*3*3*5

题目

将一个正整数分解质因数,例如:输入90,输出233*5

分析:从2开始向数本身遍历,能整除的肯定是最小的质数。

在这里插入图片描述

对n进行分解质因数,应先找到一个最小的质数i,然后按下述步骤完成
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>i,但n能被i整除,则应打印出i的值,并用n除以i的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被i整除,则用i+1作为i的值,重复执行第一步。

思路1

# 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
n = int(input('请输入需要分解的正数:'))
# 创建一个列表用来存放遍历出来的因数
lt = []
# 给n换个名字记录,便于打印时打印出用户输入的n
m = n
while n > 1:
    for i in range(2,n+1):
        if n%i==0:
            # 记录下用最小因数分解后的n
            n = n//i
            # 把i转换成str,存到列表,便于后面用join拼接字符串列表
            lt.append(str(i))
            # 找到一个最小的因数时,就跳出for in循环,开始下一次循环
            break
if len(lt) == 1:
    print(m,'=','1 ×',m)
else:
    s = '×'.join(lt)
    print(m,'=',s)

结果

在这里插入图片描述

思路2

from math import sqrt
while 1:
    n=int(input('请输入整数:'))
    print ("%d = " %n , end = '')
    while 1:
        for i in range(2,int(sqrt(n)+1)):
            if n%i==0:
                print('%d*'%i,end='')
                n=int(n/i)
                break
        else:
            print(n)
            break

结果

在这里插入图片描述

思路3


#将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
#持续找最小的因数
def min_factor(a,factor_list):
    for i in range(2,a):
        flag=0
        if a%i==0:
            factor_list.append(i)
            min_factor(int(a/i),factor_list)
            flag=1
            break
    if flag==0:
        factor_list.append(a)
    return factor_list #若把return factor_list写在if里面,因为使用了递归只有在执行最里面的循环时可以返回factor_list,其他循环不满足flag=1都会返回为空,最终返回的是最外面循环的返回值,所以会返回为空。
target=int(input("please input a positive integer:"))
factor_list=[]
print (min_factor(target,factor_list))

结果

在这里插入图片描述

思路4

n = int(input("请输入一个数:"))
print(n,'=',end="")
i = 2
while i <= n:
    if i == n:
        print(i, end="")
        break
    elif n % i == 0:
        print(i, end="*")
        n = n / i
    else:
        i += 1

结果

在这里插入图片描述

思路5

n = int(input("请输入一个数:"))
print(n,' = ',end="")
if n <= 0:
    print("你输的数字小于零啦")
i=2
if n!=1:
    while i!= n:
        if n % i == 0:
            print(i,end=' * ')
            n = n // i
        else:
            i+=1
    print(i,end='')
else:
    print(n)

结果

在这里插入图片描述

思路6

num = int(input('请输入一个数:'))

a = '{0}='.format(num)
flag = True
while flag:
    for i in range(2,num+1):
        # if not num % i:
        if num % i == 0:
            if i == num:
                flag = False
                a = a + str(i)
            else:
                a = a + str(i) + '*'
                num = num//i
            break
print(a)

结果

在这里插入图片描述

思路7

num = int(input('请输入一个数:'))

def fenjie(num):
    a = '{0}='.format(num)
    flag = True
    while flag:
        for i in range(2,num+1):
            if not num % i:
                if i == num:
                    flag = False
                    a = a + str(i)
                else:
                    a = a + str(i) + '*'
                    num = num//i
                break
    return a
print(fenjie(num))

结果

在这里插入图片描述

思路8

# ① 询问输入
x = int(input("请输入一个数:"))
print(x ,'= ',end=' ')
# ② 进行分解
temp = [] 
while x!=1:
    for i in range(2,x+1):
        if x % i == 0:
            temp.append(i) 
            x = x // i
            break
# ②循环遍历输出
for i in range(len(temp)):
    if i!=len(temp)-1:
        print("%d * " % temp[i],end='')
    else:
        print("%d " % temp[i],end='')

结果

在这里插入图片描述

思路9

1.找一个最小的质数i=2
2.对i进行循环+1,判断i是否能整除a,可以就存到c里面,并让a=a//i
3.重新从2开始循环重复上述步骤
4.实验可以输出正确结果

// An highlighted block
#将一个整数分解质因数
a=int(input("Please input a number:"))
b=a//2
c=[]
for j in range(b+1):
    #只需要循环a的一半就可以了
    for i in range(2,a):
        #质因数从2开始
        if a%i==0:
            c.append(i)
            a=a//i            
            break
for i in range(len(c)):
    print(c[i],'*',end=' ')
print(a)    
#a已经被质因整除过最后也变成了质因数

结果

在这里插入图片描述

思路10

// An highlighted block
#将一个整数分解质因数
a=int(input("Please input a number:"))
b=a//2
c=[]
for j in range(b+1):
    #只需要循环a的一半就可以了
    for i in range(2,a):
        #质因数从2开始
        if a%i==0:
            c.append(i)
            a=a//i            
            break
for i in range(len(c)):
    print(c[i],'*',end=' ')
print(a)    
#a已经被质因整除过最后也变成了质因数

结果

在这里插入图片描述

总结

这类题有比较多的解析,总的来说就是—能被整除的就是最小质数。
这里从网上搜集了10种方法,大家可以根据相关的代码进行改进。
大家有更好的答案可以留言在评论。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊菜来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值