int algo(int n, int m) { // invariant: n is uniform in the range [0, m[ if (m < q) return algo(p*n + randint(p), m * p); if (n < q) return n; return algo(n-q, m-q); } algo(0, 1);