// 1. 쉬운 방법
#include <stdio.h>
main()
{
int i, j, num[256] = {0, };
for (i = 0; i < 256; i++) num[i] = i; // 초기화
printf("최초값\n");
for (i = 0; i < 256; i++) printf("%d ", num[i]);
printf("\n");
for (j = 2; j*j < 256; j++) { // 16*16 <= 256
for (i = j*2; i < 256; i += j) num[i] = 0; //
}
printf("소수값들\n");
for (i = 2; i < 256; i++) if (num[i]) printf("%d ", num[i]);
}
// 2. 약간 고급
#include <stdio.h>
main()
{
int i, j, num[256] = {0, }, n = 2;
for (i = 0; i < 256; i++) num[i] = i; // 초기화
printf("최초값\n");
for (i = 0; i < 256; i++) printf("%d ", num[i]);
printf("\n");
num[1] = 0; // 소수는 2이상
do {
if (num[n]) for (i = n * 2; i < 256; i += n) num[i] = 0;
n++;
} while (n * n <= 256); // 16*16 <= 256
printf("소수값들\n");
for (i = 2; i < 256; i++) if (num[i]) printf("%d ", num[i]);
}
// 3. 2번을 체를 구하면서 출력 (위 그림대로)
#include <stdio.h>
main()
{
int i, j, num[256] = {0, }, n = 2;
for (i = 0; i < 256; i++) num[i] = i; // 초기화
printf("최초값\n");
for (i = 0; i < 256; i++) printf("%d ", num[i]);
printf("\n");
num[1] = 0; // 소수는 2이상
printf("소수값들\n");
do {
if (num[n]) {
printf("%d ", num[n]);
for (i = n * 2; i < 256; i += n) num[i] = 0;
}
n++;
} while (n * n <= 256); // 16*16 <= 256
for (i = n; i < 256; i++) if (num[i]) printf("%d ", num[i]);
}