如果您有权访问(伪)随机数生成器,则可以生成0到1之间的随机数.如果该数字低于p,则返回0,否则返回1.您在问题中没有明确说明,但是我将假设您对随机源的唯一访问是调用f()一次获得一个位.
考虑p的二进制表示,例如:0.011010010110 ...同样调用f()重复生成无限长度的随机二进制数字序列x:0.0110110010101 ...
一旦你确定x高于或低于p,你就完成了.您只需要根据需要多次调用f以确保结果.
p=0.011010...
x=0.011011...
^
x>p: Stop and return 1.
Run Code Online (Sandbox Code Playgroud)
我认为这是作业,所以我不会给出完整的源代码.