이렇게 sleve가 500만인 경우.. 배열의 크기 자체가 엄청나게 크기 때문에, 오래 걸릴 수 있어요.
또 다른 이유는 Sieve[x]에 x의 소인수들을 모두 저장하는 거 같은데요. 공간 복잡도가 어떻게 될까요?
에라스토스 테네스의 체 복잡도만큼 된다. 정도로 요약하면 될 겁니다. 여기서 아껴지는 공간은..
루트(500만) 보다는 크면서, 소수인 것 만큼은 절약될 수 있겠네요.
대략적으로 공간 복잡도가 O(nloglogn)쯤 될 건데.. 500만 x log28 = 2천만 ~ 3천만입니다.
제가 3시에 수업이라 자세히는 설명 못 드리고, 수업 시간에 자세히 답변 드릴게요.
ploffer11 5년 전
TLE로 고통받다가, 에라토스테네스의 체를 조금 응용하면 풀릴 수도 있겠다 싶어서 얼른 고쳐서, 다음과 같은 코드를 돌려봤는데
Release모드 기준 이 함수 실행에만 5초 이상이 소요되었습니다.
벡터의 push_back이 메모리를 새로 할당하느라 느린가 싶어서
queue<int> Sieve[5000005];로 코드를 바꿔보았지만, 오래 걸리기는 마찬가지였습니다.
벡터의 push_back, 큐의 push 등이 단순 인덱스 접근 Sieve[i] = 1; 보다 훨씬 힘들고 오래드는 작업인가요?
문제는 다른 방법으로 접근해 맞았지만, 궁금증이 남아서 질문해 봅니다.