오일러 프로젝트 10 번째 문제점 :Project Euler 10 - 첫 번째 파이썬 코드가 두 번째 코드보다 훨씬 빠르게 실행되는 이유는 무엇입니까?
나는이 조각을 발견했다.10 다음 소수의 합은 2 + 3 + 5 + 7 = 17
은 이백 만 아래의 모든 소수의 합을 찾는다.
sieve = [True] * 2000000 # Sieve is faster for 2M primes def mark(sieve, x): for i in xrange(x+x, len(sieve), x): sieve[i] = False for x in xrange(2, int(len(sieve) ** 0.5) + 1): if sieve[x]: mark(sieve, x) print sum(i for i in xrange(2, len(sieve)) if sieve[i])
3 초 동안 실행 here 출판 :
def isprime(n):
for x in xrange(3, int(n**0.5)+1):
if n % x == 0:
return False
return True
sum=0;
for i in xrange(1,int(2e6),2):
if isprime(i):
sum += i
내 코드 (두 번째)이 훨씬 느립니다 왜 이해가 안 :
는이 코드를 썼다?
O (n log logn) 인 이유는 n = log (2e6) 또는 n = 2e6입니까? – 0x90
나는'n = 2e6'을 의미한다 –
시련은 제곱근에서 멈춘다. 그래서 내 머리 꼭대기에서 그 복잡성이 O (n^2)보다 좋다. 나는 O (n^1)라고 말하고 싶다.5/log n), 그러나 나는 가장 작은 가장 작은 요소를 가진 복합체를 세지 않았으므로 약간 더 나쁠 수있다 (상한 O (n^1.5)). –