loj#P6267. 生成随机数
生成随机数
题目描述
「诶,我想生成一个随机数,等概率是 或 。」
「呐,我给你一枚均匀的硬币,你扔一次就好啦。」
「那如果我想让它等概率是 或 或 呢?」
「嗯,我想想。这样吧,你先扔两次,如果依次是反反就生成 ,反正就生成 ,正反就生成 ,正正就重新来吧。」
「诶,这个方案是不是有可能永远不能结束啊?」
「是的呢,但是期望 次就可以结束了,而且这是期望次数最小的方案。」
「好厉害呀。那如果我还是想让它是 或 ,但是概率比是 比 呢?」
「还是可以用刚才的方案,如果生成了 就当成 好了。」
「啊,那在这里还是期望次数最小的方案吗?」
「应该不是了吧,毕竟浪费了一些信息。」
「那么应该是什么方案呢?」
「似乎有点复杂了呢,让我想一想。」
从前有一个随机数生成器,能够生成一个 内的整数,且生成 的权重是 (即生成 的概率比是 )。现在它已经找不到了,而你想模拟这个生成的过程,但是你手里只有一枚均匀的硬币。你想了很久,设计了一个方案并开始扔硬币。可是你扔了很多很多次硬币,却发现你还是没有模拟成功——或许这个方案实在太慢了,甚至有可能永远不会结束。于是你希望找到一个期望扔硬币次数最少的模拟方案,但是这个方案讲起来可能比较复杂,你想先知道这个最少的期望扔硬币次数。
输入格式
第一行,一个正整数 。
第二行, 个空格隔开的正整数,其中第 个数是 。
输出格式
我们保证这个答案是一个正有理数,设其等于 ,且 和 是互质的正整数。
我们保证存在非负整数 ,使得 和 对 取余的结果相等,设 是最小的 。
仅一行,一个非负整数 。
2
1 1
1
3
1 1 1
665496238
2
1 3
499122178
7
1 1 1 1 1 1 1
570425348
3
2 3 3
748683267
3
1 3 5
887328316
3
3 3 4
798595485
数据范围与提示
测试点编号 | 规模限制 | 特殊限制 |
---|---|---|
A | ||
B | ||
无 | ||
A | ||
B | ||
无 | ||
A | ||
B | ||
无 | ||
A | ||
B | ||
无 | ||
无 | A | |
B | ||
无 |
对于所有数据,,。其中 表示所有 的和,A 表示 是 的幂次,B 表示 是奇数。