본문 바로가기
알고리즘!/Dynamic Programming

[C] 1929: 소수 구하기

by soeayun 2023. 8. 10.

사실 이 문제가 Dynamic Programming로 푸는 것은 아니다.

DP는 점화식을 이용하여 i번째까지 구한 것을 저장하고 이것을  i+1번째를 구할 때 이용하는 것이다.

사실 이걸 그대로 사용하고 있지는 않다.

 

다만 DP에 쓰이는 방법 일부를 사용하고 있다.

i번째 수가 소수인지를 각각 구하는 것이 아니라 1부터 탐색을 할때 소수이면

그 수의 배수들을 따로 저장하여 소수인지 확인하면 된다.

즉 Bottom-up 방식으로 생각해서 구현하면 된다.

 

#include <stdio.h>

int dp[1000001];

int main(void)
  {
    int m,n;
    scanf("%d %d",&m,&n);
    
    for(int i=2;i<=n;i++)
      {
        if(dp[i]==0)
        {
          if(i>=m && i<=n)
          {
            printf("%d\n",i);
          }
          
          int tmp=i;
          int tmp_i=i;
          while(tmp<=n)
           {
             dp[tmp]=1;
             tmp+=tmp_i;
           }
        }
        
      }
        
  }

'알고리즘! > Dynamic Programming' 카테고리의 다른 글

[C] 11659: 구간 합 구하기 4  (0) 2023.08.21
[C] 2293: 동전 1  (1) 2023.08.21
[C] 1003: 피보나치 함수  (0) 2023.08.03
[C] 2748: 피보나치 수 2  (0) 2023.07.30
[C] 1149: RGB거리  (0) 2023.07.30