生成一个随机区间,其中 n 出现的概率为 1/n

Generate a random interval where probability of n appearing is 1/n

假设我们有一个有 100 个页面的新闻网站,每个页面显示几篇文章,我们希望定期解析该网站以统计每篇文章的评论数量。
一篇文章的评论数量在新文章上变化很快(在第一页上),在非常旧的文章上(在最后几页上)变化非常缓慢。
所以我想比最后几页更频繁地解析第一页。

这个问题我想的解决办法是每次生成一个我们要解析的页面的区间,另外要求这个区间内的n个出现的概率是1/n
比如我们每次都会解析第1页
第2页会出现在间隔的一半时间里。
第3页,1/3的时间...

我们的算法大多数时候会生​​成 'interval' [1,1]。间隔 [1,2] 的可能性较小,[1,3] 的可能性更小......而 [1,100] 将非常罕见。

您是否找到了一种使用大多数语言的常用随机函数来实现此算法的方法?
是否有另一种解决问题的方法(更频繁地解析网站上的最新内容)更有意义?

感谢您的帮助。

编辑:
这是 Python 中基于@david-eisenstat 提供的答案的实现。
我试图用 random() 生成整数来实现这个版本,但我得到了奇怪的结果。

# return a number between 1 and n
def randPage(n):
    while True:
        r = floor(1 / (1 - random()))   
        if r <= n:
            return r

如果您有一个函数 random() returns 在区间 [0, 1) 中翻倍,那么您会查看第 1floor(1 / (1 - random())) 页。当且仅当 random() 的输出在区间 [1 - 1/n, 1) 中时才会检查页面 n,该区间的长度为 1/n.

如果您在区间 [0, RAND_MAX] 中使用整数 random() 函数,则让 k = random() 并查看 RAND_MAX / k 页,如果 k != 0 或所有这些如果 k == 0.