소수 구하기

2020. 12. 9. 19:50·알고리즘

소수를 구하는 여러 알고리즘들이 있지만 그중에서 자주 사용되는 것은

에라토스테네스의 체이다.

 

한번 틀을 짜놓고 외우면 이후에 쉽게 사용 가능하다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <vector>
using namespace std;
 
vector<bool> sieve;
 
void era(int n) {
    sieve.resize(n + 1, true);
    sieve[0] = sieve[1] = false;
    for (int i = 2; i * i <= n; ++i)
        if (sieve[i])
            for (int j = i * 2; j <= n; j += i)
                sieve[j] = false;
}
 
int main() {
    int n;
 
    cin >> n;
    era(n);
 
    for (int i = 2; i <= n; ++i)
        if (sieve[i]) cout << i << '\n';
 
    return 0;
}
Colored by Color Scripter
cs

 

그 외에도 비트마스크를 이용해서 소수를 구하면 메모리를 무려 1/8이나 절감시킬 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const int MAX = 1e6;
unsigned char sieve[(MAX + 7) / 8 + 1];
 
bool isPrime(int k) {
    return sieve[k >> 3] & (1 << (k & 7));
}
 
void setComposite(int k) {
    sieve[k >> 3] &= ~(1 << (k & 7));
}
 
void era() {
    fill(sieve, sieve + (MAX + 7) / 8, 255);
    setComposite(0);
    setComposite(1);
 
    for (int i = 0; i * i <= MAX; ++i)
        if (isPrime(i))
            for (int j = i * 2; j <= MAX; j += i)
                setComposite(j);
}
Colored by Color Scripter
cs

 

이런 식으로 전처리해주고 사용하면 된다.

'알고리즘' 카테고리의 다른 글

플로이드 - 와샬 알고리즘  (0) 2020.10.19
벨만 - 포드 알고리즘  (0) 2020.10.18
유니온 파인드(Union-Find)  (0) 2020.10.15
순열과 조합  (0) 2020.10.02
다익스트라 알고리즘  (0) 2020.09.24
'알고리즘' 카테고리의 다른 글
  • 플로이드 - 와샬 알고리즘
  • 벨만 - 포드 알고리즘
  • 유니온 파인드(Union-Find)
  • 순열과 조합
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dp
    트리
    행렬 제곱
    알고리즘
    큐
    구현
    이분 탐색
    시뮬레이션
    dfs
    소수
    프로그래머스
    BFS
    MST
    유니온 파인드
    냅색
    우선순위 큐
    이분탐색
    분할 정복
    팰린드롬
    GREEDY
    완전탐색
    조합
    다익스트라
    SWEA
    피보나치 수
    피사노 주기
    크루스칼
    코딩테스트 연습
    완전 탐색
    BOJ
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
소수 구하기
상단으로

티스토리툴바