에라토스테네스의 체를 이용해 배열을 미리 채워놓고,
입력을 받을 때마다 배열을 조회하면서 해당 구간의 소수의 개수를 세어 출력한다.
※ n = 0일때는 출력을 하지 않고 프로그램을 종료시켜야 한다.
#include <stdio.h>
int main()
{
int n, i, j, cnt;
char ns[246913] = {1,1};
for (i = 2; i * i < 2 * 123456 + 1; i++)
if (!ns[i])
for (j = i * i; j < 2 * 123456 + 1; j += i)
ns[j] = 1;
do
{
scanf("%d", &n);
if (n)
{
for (i = n+1, cnt = 0; i < 2 * n + 1; i++)
if (!ns[i]) cnt++;
printf("%d\n", cnt);
}
} while (n);
return 0;
}
'문제풀이' 카테고리의 다른 글
[C언어] 1085번 직사각형에서 탈출 (0) | 2022.01.06 |
---|---|
[C언어] 9020번 골드바흐의 추측 (0) | 2022.01.06 |
[C언어] 백준 1929번 소수구하기 (0) | 2022.01.04 |
[C언어] 백준 11653번 소인수분해 (0) | 2022.01.04 |
[C언어] 백준 2581번 소수 (0) | 2022.01.03 |