#include #include #include static double expected_different(double keyspace, double subset) { return keyspace * (1.0 - pow((keyspace - 1.0) / keyspace, subset)); } int main(int argc, char **argv) { double unique, total, keyspace, min, max; if (argc != 3) return 1; unique = atof(argv[1]); total = atof(argv[2]); min = 0; max = pow(62, 8); do { keyspace = (min + max) * 0.5; if (expected_different(keyspace, total) > unique) max = keyspace; else min = keyspace; } while (max - min > 0.5); printf("%.0f\n", keyspace); return 0; }