⬢ DragonFlyBSD Kernel Audit
DF-5707 / mkstate.c
← back to finding ↓ download raw
/* 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;
}