problem solving

백준 13018: 특이한 수

finding wangdo 2023. 3. 6. 15:03

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