백준 2581 소수

2023. 4. 17. 22:16카테고리 없음

▶문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60 이상 100 이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

 

요약하자면

자연수 a,b를 입력받아 a~b까지의 수중 소수인 것들의 합과 소수중 제일 작은 값을 출력하는 문제입니다.

 

저는 아래와 같은 코드를 작성하였습니다.

아직은 재귀함수를 완벽히 이해하지 못해 단순 반복문으로 코드를 작성하였지만

곧 재귀 함수를 사용한 문제풀이도 올리도록 하겠습니다. 

#include<stdio.h>
int main(void){
    
    int a,b;
    int o=0,min=0, sum=0;//변수 초기화
    
    scanf("%d %d",&a,&b);
    
    for(int i=a;i<=b;i++){//a수 부터~ b수까지 반복
        for(int j=2;j<=i;j++){ //a~b수에 j를 넣어 소수인지 판단하는 조건문
            if(i%j==0) //i%j
                if(i==j){
                    sum+=i;
                    o++;
                    if(o==1)
                        min=i;
                    break;
                }
            else
                break;
        }
    }
    if(sum==0)
        printf("-1");
    else
        printf("%d\n%d",sum,min);
    
    return 0;

}