블로그 이미지
shadowchaser
이곳 저곳 이것 저것

calendar

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 27 28 29 30

Notice

2016. 6. 23. 00:23 Algorithm

소수를 구하는 방법중엔 에라토스테네스의 체 방법이 꽤 효과적이다.

어차피 알고리즘 문제에서도 에라토스테네스의 체 를 응용한 문제가 더 많이 나올 테니 이것을 응용하는게 더 좋음.(TC가 많아도 일단 한번 다 저장하면 장땡이기 때문)

#include<stdio.h>


int N;

int arr[10001];

void prime(int num)

{

for (int i = 0; i < num; i++)

{

arr[i] = i;

}

for (int i = 2; i <= num; i++)

{

if (arr[i] == 0) continue; // 이미 체크된 수의 배수는 skip (이거 지우면 엄청 오래걸림)

for (int j = 2; j <= num; j++)

{

if (arr[j] != i && arr[j] % i == 0){

arr[j] = 0;

}

}

}

}

void main()

{

scanf("%d", &N);

prime(N);

}


그! 런! 데!!!이 방법이 더 좋다. 무조건 이 아래방법을 써야한다.!!!

예를 들어 10000까지의 소수를 구하려한다면, 아래 공식으로 써야한다. 100이라고 쓴 거 잘못쓴거 아님!

for (int i = 2; i < 100; i++)

{

if (prime[i] == 0) {

for (int j = i*i; j < 10000; j++)

{

prime[j] = 1;

}

}

}

}

'Algorithm' 카테고리의 다른 글

절대값 MAX 매크로  (0) 2016.08.20
바이너리서치를 통한 정올 예산  (0) 2016.08.20
posted by shadowchaser