Опишите реализацию процедуры Random(a,b), которая может использовать только один вызов — процедуры Random(0,1). Чему равно математическое ожидание времени работы вашей реализации и как оно зависит от a и b?
Random(0,1) — 50% вернёт 0, и 50 % вернёт 1.
Random(a,b) — с вероятностью 1/(b-a+1) вернёт число из интервала [a,b].
Гугл показывает реализации с побитовым (Random(0,1)) заполнением числа. Но многие из них у меня вызвали сомненния (одна выходит за интервал, другая показалась неравновероятной).
CFBR78, задача B-div1 показывает, как можно написать процедуру Random(0,b-a). Понятно, что прибавляя a к результату, можно обобщить это на (a,b).