提交时间:2024-10-30 15:59:47

运行 ID: 33942

#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e5+10; int n,k,len; int nxt(int x){ return (x+k)%n; } int gcd(int x,int y){ if(y==0) return x; return gcd(y,x%y); } void solve1(){ int x=0; for(int i=1;i<=n/2;i++){ printf("%d %d\n",x,(x+k)%n); x=(x+2*k)%n; } } void solve2(){ int tot=n/len; //cout<<len<<' '<<tot<<endl; for(int i=0;i<=tot-2;i++){ for(int j=i;j+k+1<n;j+=2*k){ printf("%d %d\n",j,j+k+1); } } for(int i=len-1,j=1;j<tot;i=nxt(i),j+=2){ printf("%d %d\n",i,i-1); } printf("%d %d\n",n-k,n-k+1); } signed main(){ scanf("%d%d",&n,&k); if(!(n&1)){ printf("-1"); return 0; } printf("%d\n",n>>1); len=gcd(n,k); if(len==1){ solve1(); }else{ solve2(); } return 0; }