쌓고 쌓다
에라토스테네스의 체 C++ 구현 코드 본문
에라토스테네스의 체 설명은 아래의 링크에 잘 되어있다.
아래의 코드로 구현 해보았다.
#include <algorithm>
using namespace std;
bool visit[1000001]; // 소수라면 false이다.(방문하지 않았으므로) <-> true
fill(visit,visit+1000001,false); // false로 초기화
for(int i=2;i<=n;i++)
{
if(visit[i]==true) // 이미 true 판별난것은 배수들 true처리 되어있음.
continue;
for(int j=i*2;j<=n;j+=i) // i의 배수들
visit[j]=true;
}
일단 <algorithm>에서 지원하는 fill 함수를 통해 false로 초기화했다.
for문을 다 돌고난 뒤 결과적으로 visit의 i번째가 true 또는 false일텐데 아래의 뜻을 가진다.
- true : 소수가 아니다.
- false : 소수가 맞다.(방문하지 않았다.)
for(int j=i*2;j<=n;j+=i) // i의 배수들
visit[j]=true;
방문한 i번째의 배수들은 true로 처리한다.
'알고리즘 > 개념' 카테고리의 다른 글
덧셈 연산 없이 비트 연산자로 덧셈 구현 (1) | 2022.10.06 |
---|---|
허프만 코드 (0) | 2022.06.04 |
최소 공통 조상 알고리즘(LCA, Lowest Common Ancestor) (0) | 2022.05.17 |
후위 표기식 계산 - 스택 활용 (0) | 2022.03.28 |
후위 표기식 변환 - 스택 활용 (0) | 2022.03.28 |
Comments