K Co-prime Permutation

alt alt 输入样例1

5 3

输出样例1

1 4 5 2 3

输入样例2

1 0

输出样例2

-1

题解

题目的意思是给一个排列,使得这一个排列的下标与pip_i的数字互质的总个数为k个。

注意有一种构造方法:

两个相邻的数字一定是互质的。

也要注意:当k为0的时候是不可能的(因为1与任何数字的最小公约数是1)。

#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
int main()
{
    int n, k;
    cin >> n >> k;
    if(k == 0){
        puts("-1");
        return 0;
    }
    for(int i = 2; i <= k; i++)
    {
        printf("%d ", i);
    }
    printf("%d ", 1);
    for(int i = k+1; i <= n; i++)
        printf("%d ", i);
    puts("");
  
    return 0;
}