프로젝트 오일러 세 번째 질문

태그 (공백으로 구분) : 오일러의 블로그


최대 소인수

13195의 주요 요인은 5, 7, 13, 29이다.

번호 600851475143의 가장 큰 주요 요인은 무엇입니까?

질문의 의미하는 것은 매우 간단합니다, 600 851 475 143 최대 소인수를 찾고, 소인수 13,195 다수의 가장 큰 주요 요인은 5,7,13,29 최대 규모있는 29 인이 찾을 수 있습니다.

첫 번째 반응은 가장 큰 소수를 발견 600,851,475,143 모든 요소를 ​​찾고 있습니다.

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]

공통 기술을 가속 어떤 요소를 찾기 없지만, 위의 프로그램이 이미 매우 빠르게 실행하지만, 일부 가속 기술이있는 판사는 소수 아니다筛素数法

筛素 수

배수는 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}

그것은, 우리가 600 851 475 143의 요인을 찾을 수 있습니다,이 아이디어를 기반으로 복합 수를 걸러합니다

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]

최종 결과는 6857입니다

추천

출처www.cnblogs.com/lepeCoder/p/10991575.html