用lst存储待输出的因子,设计求因子的函数divisor以及判断质数的函数isPrime
while循环判断lst内是否都是质数,全是质数就可以控制lst列表在一行内输出了:
import math def isPrime(n): #判断是否为素数的函数 素数返回True 合数返回False n_root = int(math.sqrt(n)) if n == 2 or n == 3: return True else: for i in range(2, n_root + 1): if n % i == 0: return False return True def divisor(p): # 求数的因子的函数,返回两个和最小的因子 list p_root = int(math.sqrt(p)) j = [1, p] for i in range(p_root, 0, -1): if p % i != 0: pass else: j[0] = i break j[1] = int(p/(j[0])) if j[0] == 1: l = list() l.append(j[1]) return l else: return j def bool_lst(lst): len_f = len(lst) i = 0 for item in lst: if item: i += 1 if i == len_f: return True else: return False s = int(input()) # 接收输入的整数 int lst = [s] # 存储待输出的质因子 len_lst = len(lst) # 待输出列表的长度 int lst_flag = list() # 判断待输出列表是否全为质数的指标 全是质数则为True 默认不是质数 lst for i in range(0, len_lst): lst_flag.append(isPrime(lst[i])) # 更新 lst_bool = bool_lst(lst_flag) # 更新 bool while (lst_bool == False): # 待输出因子列表中有合数 for item in lst: s_new = divisor(item) # s_new是有两个因子的列表 lst = lst + s_new # 在末尾加入两个因子 lst.remove(item) # 删除被拆解的数 len_lst = len(lst) # 更新len_lst lst_flag = list() for i in range(0, len_lst): lst_flag.append(isPrime(lst[i])) # 更新lst_flag lst_bool = bool_lst(lst_flag) for item in lst: if item == 1: lst.remove(item) lst.sort() if lst_bool: print(" ".join(str(i) for i in lst)) # 控制列表在一行内输出
import sys n = int(input()) for i in range(2, int(n ** 0.5) + 1): # 遍历所有可能的因数,直到 sqrt(n) while n % i == 0: # 如果 i 是 n 的因子 print(i, end=" ") # 输出 i n = int(n / i) # 更新 n 为商 if n > 2: # 如果 n 本身是一个大于 2 的质数 print(n) # 输出 n
import math def caculate_num(k): num=k str1='' while num%2==0:#循环计算满足2的结果个数,若不满足,则退出while循环,进入下一个代码 str1+='2'+' ' num//=2 for i in range(3,int(math.sqrt(num))+1,2):#质数一定小于根号下num,并且大于2的部分质数一定是奇数,故而步长设置为2 while num%i==0:#循环判断满足i的情况 str1+=str(i)+' ' num//=i if num>2: str1+=str(num) return str1 #计算全部的质数因子 #最优时间复杂度O(sqrt(n)) i_data=int(input()) print(caculate_num(i_data))
def prime_factors(n): factors = [] # 处理2这个特殊的质因子 while n % 2 == 0: factors.append(2) n //= 2 # 处理奇数质因子 for i in range(3, int(n ** 0.5) + 1, 2): while n % i == 0: factors.append(i) n //= i # 如果n仍然大于2,则n本身是一个质因子 if n > 2: factors.append(n) return factors prime_list = prime_factors(int(input())) prime_list = map(str, prime_list) print(' '.join(prime_list))