Notice
Recent Posts
Recent Comments
Link
궤도
[EPPER] 12회 9번 본문
문제
풀이
모든 경우의 수를 다 따져야 한다. 일단 P는 아무리 커봤자 N, M 중 작은 것보다 커질 수 없으니 N, M 중 작은 것을 찾는다.
이게 그 경우의 수들이다.
1. N이 P로 나누어 떨어짐
1. (M-2)가 P로 나누어 떨어짐
2. (M-1)이 P로 나누어 떨어짐 && (N-2)가 P로 나누어 떨어짐
2. (N-1)이 P로 나누어 떨어짐
1. (M-1)이 P로 나누어 떨어짐
2. (M-2)가 P로 나누어 떨어짐 && M이 P로 나누어 떨어짐
3. (N-2)가 P로 나누어 떨어짐
1. M이 P로 나누어 떨어짐
이걸 전부 떠올린다면 조건에 맞춰 코드를 작성하면 끝이니 쉽겠지만, 이걸 이렇게 전부 떠올리는게 힘들어서 문제다.
소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int N, M;
int min;
scanf("%d %d", &N, &M);
if (N > M)
min = M;
else
min = N;
for (int i = 1; i <= min; i++) { //모든 경우의 수를 다 따져봐야함
if (N % i == 0) {
if ((M - 2) % i == 0)
printf("%d ", i);
else if ((M - 1) % i == 0 && (N - 2) % i == 0)
printf("%d ", i);
}
else if (N % i == 1) {
if ((M - 1) % i == 0)
printf("%d ", i);
else if ((M - 2) % i == 0 && M % i == 0)
printf("%d ", i);
}
else if (M % i == 0 && (N - 2) % i == 0)
printf("%d ", i);
}
}
Comments