문제

소수(prime number)란 1보다 큰 자연수 중 1과 자기 자신 두 개만을 약수로 갖는 수를 말한다.
자연수 M과 N을 입력받아 M부터 N까지 소수의 개수를 구하여 출력하는 프로그램을 작성하시오.

 

입력형식

자연수 M과 N이 공백으로 구분되어 주어진다. (1 ≤ M ≤ N ≤ 2,000,000)

 

출력형식

M이상 N이하의 자연수 중 소수가 몇 개인지 구하여 출력한다.

 

<코드>

#include <stdio.h>
 
 int prime[2000005];
 
void eratos(int n)
{
    int i, j;
	
	prime[0] = prime[1] = 1;
    for (i=2; i*i <= n; i++)
    {
        if (!prime[i])
        {
            for (j=i*i; j<=n; j+=i) // i의 제곱부터 n까지 i씩 증가
            {
                prime[j] = 1; // i의 배수 제거하기
            }
        }
    }
}

int main()
{
    int s, e, i;
    int cnt = 0;
    scanf("%d %d", &s, &e);
    
    eratos(e);
    
    for (i=s; i <= e; i++)
    {
        if(prime[i]==0)
            cnt++;
    }
    printf("%d\n", cnt);
    return 0;
}
 

'코딩 > Beginner Coder' 카테고리의 다른 글

1534 : 10진수를 2,8,16진수로  (0) 2020.06.02
2814 : 이진수  (0) 2020.05.30
1901 : 소수 구하기  (0) 2020.05.29
1740 : 소수  (0) 2020.05.28
2811 : 소수와 합성수  (0) 2020.05.28

+ Recent posts