排序问题是算法领域中一类非常经典的问题。排序算法解决的是这样一个问题:
给定一个实数序列,求出一个序列
使得使得
.其中
是正整数
的一个排列。
有很多种不同的算法能解决排序问题,这些算法的应用场景各不相同,消耗的时间空间也各不相同。例如冒泡排序就是一种极其优秀的排序算法,它能在的时间内完成排序任务。
另外,还有一些非常经典的排序算法,例如灭霸排序:随机删除序列中一半的数,重复这一步直到剩下的数是有序的。
在实际的应用当中,最常用(???)的排序算法还是猴子排序,这是一种随机性的算法。算法的核心思想非常简单,只有两步:
1.随机打乱这个序列;
2.检查这个序列是否为有序;如果有序,返回结果;否则回到步骤1。
这个排序算法的优秀点在于:它可能只需要1次打乱操作,遍历1次序列便可完成排序,运行效率极高。但在运气不好时,它可能需要运行很久才能得到正确的结果。然而谁愿意承认自己运气不好呢?所以这个算法的时间效率完爆冒泡排序。
输入一个整数,表示测试数据组数。
接下来T组数据,每组数据仅一行输入,一个正整数,表示给定的正整数n.
对每组数据,输出一行整数,表示对答案乘以,然后对
取余数的结果。
可以证明,答案一定是一个有理数。设答案乘以的结果为
且满足
,你需要输出的是一个正整数
,它满足
且
.可以证明这样的
是唯一存在的。
意为
除以
与
除以
的余数相同。
离散型随机变量的数学期望记作
.设X有若干种取值
,出现这些取值的对应概率分别为
,则
.一般地,有