백준 4948번 베르트랑 공준 문제 풀기

https://www.acmicpc.net/problem/4948

#include<stdio.h>
int main(void)
{
int c=0,a,b;
int i, j, arr[246913] = {0, }; arr[0] = 1, arr[1] = 1;
for(j = 2; j < 246913 / j; j++)
{
if(arr[j] == 1)
continue;
for(i = j * j; i < 246913; i += j)
if(i % j == 0) arr[i] = 1;
}

각 배열의 위치에 따라 소수면 0 소수가 아닌 다른 수는 1로 해두었 다. 소수 찾기
for(;;) // 무한 배열을 돌리고
{
scanf("%d",&a);
if(a==0) // 입력한 정수가 0이면 반복문을 멈춤
{
break;
}
else if(a==1) // 입력한 정수가 1이면 1이 출력되게 함
{
printf("1\n");
}
else if(a>1)
{
for(b=a+1;b<2a;b++) // 입려한 정수가 a라 하면 a+1
{ 에서 2
a-1까지 돌리면서 위 의 배열에서 소수를 찾았으므로 만약 그위치의 배열의 값이 0이 라면 c의 변수에 1을 더한다.
if(arr[b]==0)
{
c++;
}
}
printf("%d\n",c);
}
c=0;// 다음 입력한 수에 영향이 가지 않도록 초기화 한다.

}

}

좋은 웹페이지 즐겨찾기