#include <stdio.h>
struct xx { int l, r, m, c; } t[9000000]; int n, m, i;
void make(int l, int r, int i) { t[i].l = l, t[i].r = r, t[i].m = (l + r) >> 1, t[i].c = r - l; if (l + 1 != r) { make(l, t[i].m, i << 1); make(t[i].m, r, (i << 1) + 1); } }
int update(int l, int r, int i) { if (t[i].l == l && t[i].r == r) return t[i].c; if (r <= t[i].m) return update(l, r, i << 1); if (l >= t[i].m) return update(l, r, (i << 1) + 1); return update(l, t[i].m, i << 1) + update(t[i].m, r, (i << 1) + 1); }
int find(int k, int i) { t[i].c--; if (t[i].l == t[i].m) { printf("%d ", t[i].l); return t[i].l; } int s = t[i << 1].c; if (k <= s) return find(k, i << 1); return find(k - s, (i << 1) + 1); }
int main() { while (scanf("%d%d", &n, &m) != EOF) { make(1, n + 1, 1), i = 0; while (i = update(1, find((i + m) % t[1].c ? (i + m) % t[1].c : t[1].c, 1) + 1, 1), t[1].c); printf("\n"); } return 0; }
|