讨论(xia che ≖‿≖✧)magic number——1000000007
为什么要对1000000007取模(取余) 来看这篇博客的基本上都是和我一样脑子有坑的人,要么就是看了我某篇大数阶乘,大数的排列组合等类似博客被忽悠过来的。我刚刚说到那些类型的题目一般都要求将输出结果对1000000007取模(取余) 为什么总是1000000007呢 = _= ? 我估计啊因该是这几个原因: 1000000007是一个质数(素数),对质数取余能最大程度避免冲突(《离散数学》数论部分) int32位的最大值为2 31 -1=2147483647,所以对于int32位来说1000000007足够大,不要问我为什么是31次方。 int64位的最大值为2^63-1 = 18446744073709551616,对于1000000007来说 1000000007 2 = 1000000014000000049 不会在int64中溢出 算法题是要检查答案的,可以在最大可能的情况下避免测试点答案冲突。 所以在大数相乘的时候,因为(a∗b)%c=((a%c)∗(b%c))%c,所以相乘时两边都对1000000007取模,再保存在int64里面不会溢出,大概就是酱紫撒,更详细的我也懵啦,想不出来啦。 来源: https://www.cnblogs.com/daker-code/p/12232592.html