提交时间:2024-10-30 16:23:16
运行 ID: 33949
#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; int lst; //cout<<len<<' '<<tot<<endl; for(int i=0;i<=len-2;i++){ for(int j=2,x=i,y=nxt(i+1);j<tot;j+=2,x=nxt(nxt(x)),y=nxt(nxt(y))){ printf("%d %d\n",x,y); } } for(int i=1,x=nxt(0),y=nxt(1);i<tot;x=nxt(nxt(x)),y=nxt(nxt(y)),i+=2){ printf("%d %d\n",x,y); } for(int i=1;i<len;i+=2){ printf("%d %d\n",i,i+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; }