在大多数的编码竞赛中,程序的输出被认为是非常大的,通常要求将输出除以1000007(或者在这种情况下是一个质数)。质数的意义是什么,因为在许多情况下,我发现相同的数字是100004(即不是一个质数)……

最佳答案

质数的使用有两个原因。一个原因是整数与素数的模构成一个数学域。域中的算术在许多方面起作用,就像整数上的算术一样。这使得字段在某些竞赛问题中很有用,否则在某些情况下使用的序列可能会崩溃。某些算法可能产生零,其他琐碎的结果,或比期望的更简单的结果,因为数字涉及到模的一个因子,导致一些减少或消除发生。
另一个原因是迫使程序员处理一定大小整数的算术。如果使用复合数,则可以使用其他不使用大整数算术的技术。
例如,假设我们想知道什么132是模35,但是我们只有一个很小的处理器,不能处理三位数,所以它不能计算132=169。
那么,35=5•7,13与3模5和6模7是一致的。不用计算13的平方,我们可以计算这些残数的平方,它告诉我们132等于32=9=4模5,等于62=36=1模7。结合这些残基需要一些额外的知识(即Extended Euclidean Algorithm)。对于这些特殊的数,我们可以把5的余数乘以21,把7的余数乘以15,得到4.21+1.15=99。将该模35还原得到29,这就是答案(132模35的余数)。
如果模是素数,则这种算法的规避是不可用的。素数模本质上要求对模的平方(或耗时的工作区)以内的数使用算术运算,但复合模允许对较小的数使用算术运算,仅为模的两倍。

07-24 14:25