Project Euler에서 문제 50을 해결하려고합니다. 나에게 대답을주지 않거나 나를 위해 해결하지 말고,이 특정한 질문에 대답하려고 노력하십시오.이 목록의 모든 연속 하위 집합을 확인 했습니까?
목표는 1 백만 이하의 소수에 덧붙인 연속 소수의 가장 긴 합을 찾는 것입니다. 나는 n보다 아래의 모든 소수를 찾기 위해 체를 썼다. 그리고 나는 그것이 옳았다는 것을 확인했다. 다음 방법을 사용하여 연속 소수의 각 하위 집합 합계를 확인하려고합니다.
빈 목록 sums
이 있습니다. 각 소수에 대해 sums
의 각 요소에 추가하고 새 합계를 확인한 다음 소수를 sums
에 추가합니다.
가 여기 파이썬에
나는 문제가 소수가 있다고 말한다 백만아래 두 개 이상의 연속 소수의 모든 합계 check()
라고 한 경우 알고 싶은
primes = allPrimesBelow(1000000)
sums = []
for p in primes:
for i in range(len(sums)):
sums[i] += p
check(sums[i])
sums.append(p)
, 953, 그것은 21 개의 연속 소수의 합으로 쓰여질 수 있지만, 나는 그것을 발견하지 못한다.
내가 게시하지 않은 조기 최적화 문제가 있음을 알 수 있습니다. 그래도 도움이되는 코드를 실행하는 것에 대한 자부심. – Nathan
@interjay 어쨌든 check()을 3,080,928,753 회 호출하는 방법을 어떻게 알았습니까? 수식은 무엇입니까? – Nathan
@ Nathan : 소수의 연속적인 시퀀스는 첫 번째 요소와 마지막 요소의 쌍으로 정의 할 수 있습니다. 그래서 우리는 몇 쌍의 소수가 존재 하는지를 알아야합니다. N 개의 요소 중 N (N-1)/2 쌍이 있습니다. 이 경우 N = 78498입니다. 같은 대답을 얻는 또 다른 방법 : 내부 루프의 반복 계산 : 0 + 1 + 2 + ... + (N-1) = N (N-1)/2 – interjay