前言
我意识到小格式与小细节小方法也常常会决定胜败,而且因为这种东西卡住会极大的打击心态,且现在文章没有大致模板的形式不是很好,因此我以后将会令本日学到的小知识点放在前面,然后再写具体的例题和知识点,在记录上还是以知识点为主,如果是单独的题或者说本人没有能力单独提炼出知识点,就把题放在前面。大致是如此格式。
高精随机数
mt19937是在radom包中的一个关键字,是c11中新加入(距离现在都十年多了罢...)的一个特性,利用他生成随机数而不是rand和srand的优点在于高周期于低关联,周期大约可以达到的恐怖数字,用来简单描述已知宇宙暂时是没有太大问题的,而srand是我们前面的老朋友LCG(linear congruential generator)线性同余算法,你可能觉得好像是新的,其实:
不必多言,不懂的可以看前面的rho算法。因此我们不选择使用srand,但为了保证较高的随机性,将srand生成的数字当作mt19937的种子也是常用的做法。srand无法用作蒙特卡洛(Monte Carlo)模拟,加密算法(何止是容易破解,根据鸽笼原理,一个个试都能线性破解掉)
顺便一提,mt19937使用的算法为Mersenne twister算法,而对于硬件玩家,没有超过2kb的空间还是推荐LCG,开支较小并且可迭代。
return 0
在很多编译器中,我们可以省略返回值,但在某些编译器中返回值是不可省略的,如省略会出现段错误,因此请尽量每次都写返回值。
逆元
逆元本来不需要讲解,但经常会搞混ÿ