에라토스테네스의 체 : 소수를 구하는 방법 중 하나
원리
1) 2부터 소수를 구하고자 하는 범위 내의 모든 수를 나열함
2) 2부터 자신을 제외한 2의 모든 배수를 제거함
3) 그 다음으로 남아있는 3을 제외한 3의 모든 배수를 제거함
4) 위의 과정을 반복하여 배수들을 제거함으로써 범위 내에는 소수들만 남게 됨
//동적할당 이용
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
printf(" > 양수 입력 : ");
scanf("%d", &num);
int* pn = (int*)malloc(sizeof(int) * (num - 1)); 배열은 2부터 시작하므로 배열 크기 = (num - 2) + 1 = num - 1
if (pn == NULL)
{
printf("#저장공간이 부족합니다...\n");
exit(1);
}
int i, j;
for (i = 0; i < num - 2; i++) 1) 2부터 소수를 구하고자 하는 범위 내의 모든 수를 나열함
{
pn[i] = i + 2;
}
for(i = 0; i < num - 2; i++) i를 제외한 i의 배수를 제거
{
if (pn[i] == 0) continue; 제거된 숫자들은 i에서 배제됨
for (j = i + 1; j < num - 1; j++)
{
if (pn[j] % pn[i] == 0) pn[j] = 0;
}
}
int cnt = 0; 배열을 5개씩 끊어서 나열하기 위해 cnt 인수 등장
for (i = 0; i < (num - 1); i++)
{
if (pn[i] == 0) printf("%5c", 'X');
else printf("%5d", pn[i]);
cnt++;
if (cnt % 5 == 0) printf("\n");
}
free(pn);
return 0;
}
'프로그래밍 언어 > C언어' 카테고리의 다른 글
혼자공부하는C언어_선택 정렬 알고리즘 (0) | 2024.02.13 |
---|---|
혼자공부하는C언어_도전실전예제_Chapter17 (1) | 2024.02.12 |
혼자공부하는C언어_도전실전예제_Chapter16 (1) | 2024.02.12 |
혼자공부하는C언어_도전실전예제_Chapter15 (1) | 2024.02.11 |
혼자공부하는C언어_도전실전예제_Chapter14 (0) | 2024.02.11 |