본문 바로가기

프로그래밍/백준

백준 2581번: 소수 (C언어)

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

 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

 

더보기
#include<stdio.h>
#include<stdbool.h>
int main(){
	int i, j, N, M, sum, min;
	bool pri[10001];
	
	pri[1] = false;
	pri[2] = true;
	for(i=3; i<=10000; i++){
		if(i%2==0) pri[i]=false;
		else pri[i]=true;
	}
	
	for(i=3; i<=10000; i=i+2){
		if(pri[i]==false) continue;
		else{
			for(j=i*2; j<=10000; j+=i) {
			pri[j] = false;
			//printf("%d ",j);
			}
		}
	}
	
	scanf("%d", &M);
	scanf("%d", &N);
	
	sum = min = 0;
	for(i=M; i<=N; i++){
		if(pri[i]==false) continue;
		else{
			if(min==0) min = i;
			sum += i;
		}
	}
	
	if(sum!=0) printf("%d\n%d", sum, min);
	else printf("-1");
	
	return 0;
}