从前N个正整数中取M个的所有排列,但相邻位置上数字要求互质。按照字典序从小到大输出。
输入格式
一行2个正整数N和M, 0< M <= N <8
输出格式
每行一个排列。
输入/输出例子1
输入:
4 3
输出:
1 2 3
1 3 2
1 3 4
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
3 1 2
3 1 4
3 2 1
3 4 1
4 1 2
4 1 3
4 3 1
4 3 2
代码
#include<bits/stdc++.h>
using namespace std;
const int Max=1e6;
long long n,m;
long long f[Max];
long long fin1[Max];
int gcd(int a,int b)
{
while(b){
int r=a%b;
a=b;
b=r;
}
return a;
}
void fin()
{
for(long long i=0;i<m;i++)
{
cout<<fin1[i] << " ";
}
cout<<endl;
}
void c(long long s)
{
if(s>=m)
{
fin();
return ;
}
for(long long j=1;j<=n;j++)
{
if (f[j]==0)
if(gcd(j,fin1[s-1])==1 || s==0)
{
f[j]=1;
fin1[s]=j;
c(s+1);
f[j]=0;
}
}
}
int main(){
cin>>n>>m;
c(0);
return 0;
}