https://www.acmicpc.net/problem/2581
2581번: 소수
M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.
www.acmicpc.net
풀이
#include <stdio.h>
#include <stdlib.h>
int main() {
int m, n;
int total = 0;
scanf("%d", &m);
scanf("%d", &n);
int* arr = (int*)malloc((n - m + 1) * sizeof(int));
int c = 0;
for (int i = m; i <= n; i++) { // i = m
// i가 2가 아닐때만 진행
if (i != 2) {
// i가 2면 두번째 for문 실행 불가
for (int j = 2; j < i; j++) {
if (i % j == 0) { // 약수가 있다면
break; // i+1
}
// 약수가 없고 j가 i-1일때(소수일때)
else if (i % j > 0 && j == i - 1) {
// arr에 차례대로 소수 저장
arr[c] = i;
c++; // c+1
}
}
}
else if (i==2){ // i가 2라면 소수다
arr[c] = i;
c++;
}
}
if (c == 0) printf("-1\n"); // c가 0일때(소수가없을때)
else { // 소수일때
for (int i = 0; i < c; i++) { // 소수의 합
total += arr[i];
}
printf("%d\n", total); //소수 합 출력
printf("%d\n", arr[0]); // 최소값 출력
}
free(arr);
return 0;
}
i가 2인 조건만 없다면 코드가 더 깨끗했을것 같다.
다음부터는 i%j==0인 조건을 이용해서 1과 i 자기자신까지 포함하여 i의 모든 약수가 2개 이상일때 소수가 아니다
라는 식으로 풀어봐야겠다.
'코딩 > 백준 문제 (브론즈)' 카테고리의 다른 글
[백준/2869/C언어] 달팽이는 올라가고 싶다 _ 풀이 (0) | 2023.08.31 |
---|---|
[백준/9063/C언어] 대지 _ 풀이 (0) | 2023.08.31 |
[백준/1978/C언어] 소수찾기 _ 풀이 (2) | 2023.08.28 |
[백준/11943/C언어] 파일 옮기기 _ 풀이 (0) | 2023.08.27 |
[백준/11719/C언어] 그대로 출력하기 _ 풀이 (0) | 2023.08.23 |