이번 글에서는 에라토스테네스의 체를 이용해 소인수분해를 빠르게 하는
방법을 다루고자 한다.
https://www.acmicpc.net/problem/3142
이 문제를 풀던 도중 이 방법을 알게 되었다.
기본적인 에라토스테네스의 체 구현보다 최적화된 구현과 함께 알게 되었다.
에라토스테네스의 체 최적화(optimized sieve of eratosthenes)
보통 에라토스테네스의 체를 구현할 때면$i$ 루프( 소수 확인 루프 )를 최대 $N$ 까지 돈다.$j$ 루프( $i$ 배수 루프 )를 $2\\cdot i$ 부터 시작한다.위와 같이 구현하는데최적화 시$i$ 루프를 $\\sqrt N$ 까
velog.io
기본적인 에라토스테네스의 체 구현 형태는 다음과 같다.
for(int i=2;i<=n;i++){
if(sieve[i]) continue;
for(int j=2*i;j<=n;j+=i) sieve[j]=1;
}
이때 $j$ 의 시작을 $i^2$ 부터 하고, $sieve[j]$ 에 소수 여부만을 담는 것이 아닌 $j$의 가장 작은 소인수를 담는다.
구현은 다음과 같다.
for(int i=2;i<=n;i++){
if(sieve[i]) continue;
sieve[i]=i;
for(int j=i*i;j<=n;j+=i) sieve[j]=i;
}
오일러 피함수 \(Euler's phi function\) (0) | 2024.11.08 |
---|---|
페르마의 소정리 (0) | 2024.09.01 |
모듈러 역원 Modular Inverse (0) | 2024.09.01 |
정수론 | 기호 + 유클리드 호제법/확장 유클리드 알고리즘 알아가기 (0) | 2024.09.01 |
댓글 영역