题目:如图
Python实现:
"""分解素因数"""
import math
def is_prime(num: int) -> bool:
"""判断是否是素数"""
if num <= 1:
return False
if num <= 3:
return True
# 不在6的倍数两侧的一定不是素数
if num % 6 != 1 and num % 6 != 5:
return False
sqrt = int(math.sqrt(num))
for i in range(5, sqrt + 1, 6):
if num % i == 0 or num % (i + 2) == 0:
return False
return True
def generate_prime(n: int) -> int:
"""向后生产素数:如n=4,返回素数5"""
if is_prime(n):
return n
while True:
n += 1
if is_prime(n):
return n
def prim_split(num_input: int) -> str:
"""分解素因数"""
cur_prime = 1 # 当前待处理的素数
cur_num = num_input # 当前待处理的值
prim_list = []
while True:
cur_prime = generate_prime(cur_prime + 1) # 当前素数处理完后向后生产一个素数
remainder = cur_num % cur_prime # 余数
if remainder == 0:
cur_num //= cur_prime
prim_list.append(cur_prime)
if cur_num == 1:
break
while True: # 继续尝试当前素数是否还能作为素因数
if cur_num % cur_prime == 0:
prim_list.append(cur_prime)
cur_num //= cur_prime
continue
break
return ' * '.join(map(str, prim_list))
if __name__ == '__main__':
ret = prim_split(201804)
print(ret) # 2 * 2 * 3 * 67 * 251
暂时用最笨的方法实现。。还没有考虑算法及参考网上好的解法,如果你有好的算法,欢迎留言。