DF-5707 / mkstate.c
/* mkstate.c k T : print a state whose next k-1 draws are >= T and k-th < T */ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define M 2147483647ULL #define A 16807ULL int main(int argc, char **argv) { if (argc != 3) { fprintf(stderr, "usage: mkstate k T\n"); return 2; } int k = atoi(argv[1]); uint64_t T = strtoull(argv[2], NULL, 0); for (uint64_t s = 3; s < M - 1; s++) { uint64_t x = s; int ok = 1; for (int i = 1; i <= k; i++) { x = (A * x) % M; if (i < k && x < T) { ok = 0; break; } } if (ok && x < T) { printf("0x%llx\n", (unsigned long long)s); return 0; } } return 1; } |