欧拉计划第三题

标签(空格分隔): 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

相关文章
相关标签/搜索