이번 글에서는 에라토스테네스의 체를 이용해 소인수분해를 빠르게 하는
방법을 다루고자 한다.
https://www.acmicpc.net/problem/3142
이 문제를 풀던 도중 이 방법을 알게 되었다.
기본적인 에라토스테네스의 체 구현보다 최적화된 구현과 함께 알게 되었다.
에라토스테네스의 체 최적화optimizedsieveoferatosthenes
보통 에라토스테네스의 체를 구현할 때면i 루프소수확인루프를 최대 N 까지 돈다.j 루프$i$배수루프를 2cdoti 부터 시작한다.위와 같이 구현하는데최적화 시i 루프를 sqrtN 까
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 의 시작을 i2 부터 하고, 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 |
댓글 영역