자연수 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 |