歐拉計劃第三題

標籤(空格分隔): 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

相關文章
相關標籤/搜索