본문 바로가기
알고리즘

BOJ 2581 소수

by LaTale 2018. 8. 17.

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


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





전 문제와 똑같이 풀면 된다.


개수를 합으로 바꿔주기만 하면 된다.


10000이하의 자연수이므로 min은 10001로 설정했다.

귀찮은 관계로 그냥 전역변수로 설정하고 isprime함수쪽에서 min을 찾는 식으로 했다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 2581 소수
#include<stdio.h>
int isprime(int x);
int min = 10001;
int main() {
	int M, N;
	int cnt = 0;
	scanf("%d", &M);
	scanf("%d", &N);
	for(;M<=N;M++)
		cnt += isprime(M);
	if (cnt == 0) {
		printf("-1");
		return 0;
	}
	printf("%d\n%d", cnt, min);
	return 0;
}
int isprime(int x) {
	int flag = 0;
	for (int i = 2;i <= x;i++) {
		if (x%i == 0)
			flag++;
	}
	if (flag == 1) {
		if (min > x)
			min = x;
		return x;
	}
	else
		return 0;
}



'알고리즘' 카테고리의 다른 글

BOJ 4948 베르트랑 공준  (0) 2018.09.01
BOJ 1929 소수 구하기  (0) 2018.09.01
BOJ 1978 소수 찾기  (0) 2018.08.17
BOJ 6064 카잉 달력  (0) 2018.08.17
BOJ 1475 방 번호  (0) 2018.08.17