我是一名大学生,在开学前练习一些编码,我制作了一个 python 函数,该函数应该给出一个数字(不包括 1)的质因数分解。它引用了我用来检查数字是否为质数的函数,因此我也包含了该函数,尽管它对问题来说并不重要。
#Prime number checker
import math
def is_prime(n):
assert n >= 2
sqrt_n = math.ceil(math.sqrt(n))
last_digit = n % 10
#First, incorporate special cases
if last_digit == 0 or last_digit == 2 or last_digit == 4 or last_digit == 6 or last_digit == 8:
return False
#if the number is divisible by any of the prime numbers in this range, then it is not prime
if n > 5 and last_digit == 5:
return False
appropriate_list = [i for i in range(2, sqrt_n + 1)]
if any(n % i == 0 for i in appropriate_list):
return False
return True
#The integer factorization function
def integer_factorization(n):
factors_list = []
if is_prime(n) == True:
output_list = []
if factors_list:
output_list = [x for i in factors_list for x in i]
return output_list, n
else:
return n
else:
divisors_list = [2, 3, 5, 7]
for i in divisors_list:
if n % i == 0:
factors_list.append(i)
return integer_factorization(n // i), factors_list
我的问题: 我希望输出看起来正常,例如让integer_factorization(20) 的输出以任意顺序为5、2、2。相反,输出看起来像列表中的一系列列表。例如。 integer_factorization(20) 的结果是:((5, [2]), [2])
我正在 Jupyter 笔记本上运行这些程序。
有人可以帮忙吗?
您的问题:
return output_list, n
这会返回一个元组、一个列表和一个整数,例如([2,3], 2)
这里有同样的事情
return integer_factorization(n // i), factors_list
这会返回两个列表的元组。
试试这个:
#Prime number checker
import math
def is_prime(n):
assert n >= 2
sqrt_n = math.ceil(math.sqrt(n))
last_digit = n % 10
#First, incorporate special cases
if last_digit == 0 or last_digit == 2 or last_digit == 4 or last_digit == 6 or last_digit == 8:
return False
#if the number is divisible by any of the prime numbers in this range, then it is not prime
if n > 5 and last_digit == 5:
return False
appropriate_list = [i for i in range(2, sqrt_n + 1)]
if any(n % i == 0 for i in appropriate_list):
return False
return True
#The integer factorization function
def integer_factorization(n):
factors_list = []
if is_prime(n) == True:
output_list = []
if factors_list:
output_list = [x for i in factors_list for x in i]
output_list.append(n)
return output_list
else:
return [n]
else:
divisors_list = [2, 3, 5, 7]
for i in divisors_list:
if n % i == 0:
factors_list.append(i)
new_factors = integer_factorization(n // i)
new_factors.extend(factors_list)
return new_factors