借了某位大佬的思路
http://blog.csdn.net/wuxufanzhong/article/details/75909631
菜鸡到一旦循环从0开始而非1开始就会计数混乱QAQ
#include<bits/stdc++.h>
using namespace std;
int s[50007];
int main(){
int n,x;
while(~scanf("%d%d",&n,&x)){
if(x>=n){
printf("-1\n");
continue;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=x;j++){
s[j+(i-1)*x]=j+i;
while ( s[j+(i-1)*x]>n) s[j+(i-1)*x]-=n;
// printf("s[%d]=%d\n",j+(i-1)*x,s[j+(i-1)*x]);
}
for(int j=0;j<n;j++){
for(int i=0;i<x;i++) printf("%d ",x*j+i+1);
for(int i=1;i<=n*x;i++) if(s[i]==j+1) printf("%d ",i);
printf("\n");
}
}
return 0;
}