开发小学生

导航

小练习1-----分解质因式

方法一:对每个因式判断是否是质数,不是继续分解,是则记录

"""
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
思路:
质因数为此整数的因数并且这个因数是质数
将整数分解因数,判断因数是否为质数,若是质数则存入列表,将另一个因数继续分解,直到无法再分解
将因数列表判断是否为质数,若为质数则存入新列表,则继续分解因数
最后使用“*”拼接
"""
# 判断是否为质数
def zhishu(num):
for i in range(2,int( num**(1/2))+1):
  if num%i == 0:
    return False
  #python特有可以对for进行else操作
  else:
    return True
  # 分解质因数
def fenjiezhiyinshu(num):
  tem = []
  if zhishu(num):
    print("%d是质数,请输入其他数字"%num)
    return 0
  else:
    while num: #控制循环次数用num=0控制结束
      if zhishu(num) and num !=1: #判断最后分解的因数是否是质数,若最后的是质数且不为1(1没有意义)则结束
        tem.append(num)
        num =0
      else:
        for i in range(2, int(num**(1/2))+1): #逐步分解因式控制取值次数
        #获取因数,判断是否为质数并且存入列表
          if num%i ==0 and zhishu(i):
            tem.append(i)
            num = num//i #获取除i的另一个因子
            break
            # print(tem)
            return tem
#格式化输出
def gongshi(*lstp):#接收后参数为tuple类型需要取出列表使用
  lst=lstp[0]
  st = str(lst[0])
  for i in range(1,len(lst)):
    stt = '*' + str(lst[i])
    st += stt
  return st
num = int(input("请输入一个整数\n"))
zhi = fenjiezhiyinshu(num)
if zhi !=0:
gs = gongshi(fenjiezhiyinshu(num))
print("%d = %s"%(num,gs))

 

方法二:通过方法一代码发现,由于取第一因数时都是从1开始的逐渐递增,并且分解过程中发现因数不是质数但是会被小于此因数的质数整除。因此只要获取所循环的因数就可以了

"""
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
思路2:
分解质因数是发现每次分解是第一个因子就是质因子。每次列表保存第一个因子就可以了
将列表格式化
"""
def fenjiezhiyinzi(num):
  #print(type(num))
  tem = []
  for i in range(2,num//2+1):# 控制长度,为确保取值为整数使用//整除
    for j in range(2,num): # 去做除法运算
      if num%j==0:
        tem.append(j)
        num = num//j
        break
  if len(tem)==0:
    print("您输入的是质数,请输入其他数")
    return 0
  else:
    return tem

def gongshi(*lstp):
  lst = lstp[0]
  st = str(lst[0])
  for i in range(1,len(lst)):
    stt = '*' + str(lst[i])
    st += stt
  return st

num = int(input("请输入一个整数\n"))
zhi = fenjiezhiyinzi(num)
if zhi != 0:
gs = gongshi(zhi)
print("%d = %s"%(num,gs))

 

posted on 2020-05-22 16:26  开发小学生  阅读(347)  评论(0)    收藏  举报