https://www.acmicpc.net/problem/13018
13018번: 특이한 수열
첫째 줄에 n, k (1 ≤ n ≤ 105, 0 ≤ k ≤ n)가 주어진다.
www.acmicpc.net
골드3 난이도의 수학 분류 문제다.
이 문제의 핵심은 바로 임의의 자연수 N에 대해 N과 N+1은 서로소라는 것에 있다.
i와 A[i]가 서로소가 아닌 게 k개로 서로소인 게 n-k인 것이다. 이 때 n-k를 p라고 하자.
1은 모든 수랑 서로소이기도 하다.
그러면 숫자를 이런식으로 1씩 밀려 쓰면
1 2 3 4 5
2 3 4 5 1
이러면 모든 i에 대해 A[i]와 i가 서로소가 된다.
1부터 p까지 모든 수에 대해서만 이렇게 밀려 쓰면 된다. 그 뒤 모든 수들은 밀려쓰지 않고 그대로 쓰면 된다.
이를테면 n=7, k=2, p=5인 경우에
1 2 3 4 5 6 7
2 3 4 5 1 6 7
이러면 1~5까지만 밀려 쓴 뒤 i가 6, 7일 때만 i와 A[i]가 서로소가 아니게 된다.
다만 p=0인 경우 Impossible이 된다.
i가 1일 때는 무조건 서로소라서 서로소인 경우가 0개가 될 수는 없다.
다음은 C언어로 구현한 것이다.
int main()
{
int n, k;
scanf("%d %d", &n, &k);
int p = n - k;
if (p == 0)
{
printf("Impossible");
return 0;
}
for (int i = 1;i < p;i++)
printf("%d ", i + 1);
printf("1 ");
for (int i = p + 1;i <= n;i++)
printf("%d ", i);
}
'problem solving' 카테고리의 다른 글
백준 31778: PPC 만들기 (0) | 2024.12.08 |
---|---|
백준 23032: 서프라이즈~ (0) | 2024.11.17 |
백준 23325: 마법천자문 (0) | 2023.03.04 |
백준 15011: Irrational Division (1) | 2023.03.01 |
백준 4342: 유클리드 게임 (0) | 2023.02.28 |