對於這樣的一個題目來說,出看來,可能會想到判斷是否為質數,但其實並不需要。
只要按照從2開始遍歷,只要遇到可以整除的就是想要的質數,理由是,如果遇到合數的話,那么在此之前一定會遇到這個合數的質因子,因此不會存在這種情況。
另外就是遍歷的后邊界,其實隨着number的質因子被找到,因此number在逐漸減小,因此之后的遍歷中是包括其自身的,因此需要 number+1
代碼1:這樣的方法尤其適用於大數字,否則會有很多無用的計算
def all_divisors(number):
nb_list = []
while number != 1:
for i in range(2, number+1):
if number%i == 0:
nb_list.append(i)
number = number//i
break
return nb_list
print(all_dvisiors(52399401037149926144))
output:
[2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11]
代碼2:
def all_divisors(number):
nb_list = []
i = 2
while i <= number:
if number%i == 0:
nb_list.append(i)
number //= i
i = 2
continue
i += 1
return nb_list
