標籤(空格分隔): Euler 博客app
Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29.code
What is the largest prime factor of the number 600851475143 ?rem
題意很簡單,找一個數的最大質因數,13195的質因數有5,7,13,29其中最大的是29,求600851475143的最大質因數。博客
第一反應是求600851475143的全部因數,而後找出裏面最大的質數。it
ans = [] n = 600851475143 max = int(n**0.5) for x in range(2, max): if n%x == 0: ans.append(x) print(ans) ans = [71, 839, 1471, 6857, 59569, 104441, 486847]
找因數沒有什麼加速的技巧,並且上面的程序原本就運行很快,但判斷一個數是否是質數卻有一些加速的技巧,常見的有篩素數法
class
篩素數技巧
由於素數的倍數必定不是素數,因此咱們在找到一個素數時能夠將它的倍數排除,好比求100之內的素數:程序
n = 100 L = list(range(2, n)) ans = set() while L: x = L.pop(0) ans.add(x) i = 2 while i*x < n: if i*x in L: L.remove(i*x) i += 1 print(ans) ans = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}
基於這種思想,咱們能夠在找600851475143的因數時就將合數篩去,im
ans = [] n = 600851475143 iter_max = int(n ** 0.5) for num in range(2,iter_max): if n%num == 0: ans.append(num) n/=num while n%num == 0: n/=num # 保證n已被num除盡,此時n不會再有num*i的因數 print(ans) ans = [71, 839, 1471, 6857]
最後結果是6857while