Вот один подход, который сочетает в себе случайность и гарантию того, что в конечном итоге вы получите положительный результат в предсказуемом диапазоне:
Иметь цель (15 в вашем случае), счетчик (инициализированный в 0) иflag (инициализируется как false).
Accept a request.
If the counter is 15, reset the counter and the flag.
If the flag is true, return negative outcome.
Get a random true or false based on one of the methods described in other answers, but use a probability of 1/(15-counter).
Increment counter
If result is true, set flag to true and return a positive outcome. Else return a negative outcome.
Accept next request
Это означает, что первый запрос имеет вероятность 1/15 возвращаемого положительного результата, но по 15-му запросу, если положительный результат не был возвращен, есть вероятность1/1 положительного результата.