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

文章目录

  • 题目
  • 思路1
    • 结果
  • 思路2
    • 结果
  • 思路3
    • 结果
  • 思路4
    • 结果
  • 思路5
    • 结果
  • 思路6
    • 结果
  • 思路7
    • 结果
  • 思路8
    • 结果
  • 思路9
    • 结果
  • 思路10
    • 结果
  • 总结

题目

将一个正整数分解质因数,例如:输入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)

结果

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

思路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

结果

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

思路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))

结果

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

思路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

结果

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

思路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)

结果

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

思路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)

结果

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

思路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))

结果

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

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

结果

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

思路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已经被质因整除过最后也变成了质因数

结果

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

思路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已经被质因整除过最后也变成了质因数

结果

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

总结

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

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