#abc0083. [abc008_3]コイン

[abc008_3]コイン

问题描述

高桥君有 NN 枚可以区分正反面的硬币。这些硬币的大小不同,并且每个硬币上都写着一个正整数。

他将这些硬币随机地(以 N!N! 种可能的组合出现的概率相同的方式)排列在一行上。然后,执行以下操作:

  1. 所有硬币都正面朝上。
  2. 从最左侧的硬币开始,依次对当前正在查看的硬币右边的硬币(不包括自己),如果这些硬币上写的整数是当前正在查看的硬币上写的整数的倍数,则将这些硬币的正反面翻转。

高桥君想知道在执行完操作后正面朝上的硬币的期望数量。

请你代替高桥君编写一个程序来计算期望值。


输入

输入从标准输入给出,具体格式如下:

NN C1C_1 C2C_2 : CNC_N

  • 11 行给出一个整数 N(1N100)N (1 \leq N \leq 100),表示硬币的数量。
  • 22 行到第 NN 行,每行给出一个整数 Ci(1Ci109)C_i (1 \leq C_i \leq 10^9),表示第 ii 枚硬币上写的整数。

部分分

本问题设置了部分分。

  • 对于满足 N8N \leq 8 的数据集 11 给出正确答案,将得到 9999 分。
  • 对于没有额外限制的数据集 22 给出正确答案,再加 11 分,总共可得 100100 分。

输出

输出正面朝上的硬币的期望数量。允许输出结果绝对误差或相对误差不超过 10610^{-6}。在输出末尾需换行。


示例1


3
2
4
8

输出示例1


2.166666666667

硬币上写的数分别为 224488。例如,对于 3!=63! = 6 中不同排列的情况下,执行操作后的步骤如下:

  1. 初始状态下,所有硬币都是正面朝上,从左到右依次为 [, , ]。
  2. 然后,检查从第 22 枚硬币开始的右边硬币中,有哪些硬币上写的数是 22 的倍数。第 22 枚硬币和第 33 枚硬币是符合条件的,将它们翻转。结果,硬币从左到右依次为 [, , ]。
  3. 接下来,检查从第 33 枚硬币开始的右边硬币中,有哪些硬币上写的数是 44 的倍数。只有第 33 枚硬币符合条件,将它翻转。结果,硬币从左到右依次为 [, , ]。

硬币的正反面变化如下图所示。其中,白色的硬币表示正面朝上,黑色的硬币表示反面朝上。

按照以上操作,3!=63! = 6 种不同排列的情况下,最终状态分别如下图所示。

因此,期望值为 13/6=2.16666666666...13/6 = 2.16666666666...


示例2


4
5
5
5
5

输出示例2


2.000000000000

无论以何种顺序排列,从左到右分别为 [, , , ]。


示例3


5
2
3
2
6
12

输出示例3


3.100000000000