【本章涉及部分数学及算法内容,不感兴趣的可以跳过去】
~
提交梅森素数的流程比较容易。
获得奖励的方式也比较明确。
而决定资金到手时间的则是gImps能在多长时间内验证6洲所提交的数就是新的梅森素数。
如果gImps真的要花很久才验证出来6洲所提交的数是梅森素数。
那么6洲所收到相应的奖励也会相应推迟了。
而gImps要如何证明6洲所提交的是梅森素数呢?
先如何证明一个数是素数?
素数是指大于1的自然数,除了1和它本身之外,没有其他正因数的数。
换句话说,素数只能被1和它自身整除,不能被其他自然数整除。素数的特点是只有两个正因数:1和本身。
而从素数的定义出的话,就可以通过试除法来验证。
具体来说可以执行下面的操作:
步骤1:选择一个大于1且小于待检查数平方根的数作为除数。如果待检查数为n,则可以选择2到√n之间的数作为除数。
步骤2:将待检查数除以选定的除数。如果除法的余数为o,即待检查数能被选定的除数整除,则待检查数不是素数。
步骤3:如果待检查数不能被选定的除数整除,继续增加除数的值,重复步骤2。
步骤4:如果在2到√n之间没有找到能整除待检查数的除数,则待检查数是素数。
不可否认,试除法简单粗暴,但这仅仅限于所要你所要验证的数并不大的时候。
但当问题变成如何证明一个大的数(这个数有千万位)是素数的时候,再继续用试除法就显得很呆。
这里面主要涉及到计算复杂度的问题。
(计算复杂度听起来是一个计算机方面的问题。
但正如前面说得那样,现代数学和计算机科学之间的关系早已就是你中有我,我中有你。
就算是搞数学的,但凡是涉及到利用计算机作为工具来解决问题的时候就不得不考虑周全。
很多经典的数学问题其本质也是计算机问题。
比如说七个数学千禧难题之一的pnp问题就既是数学问题,同时也是计算机问题。
更具体来说,其本质是计算复杂度的问题。
p指的是可多项式时间内解决的问题,而np是指可多项式时间内验证解的问题。
pnp问题是计算复杂度理论中的重要问题。它们涉及了算法是否存在有效的解决方法以及在何种时间内可以解决问题的核心问题。
p问题指的是那些可以在多项式时间内解决的问题,即存在一个多项式时间复杂度的算法可以解决这些问题。这些问题的解决方法相对较高效,计算复杂度可控,例如线性时间复杂度、对数时间复杂度等。
np问题指的是那些可以在多项式时间内验证解的问题,即如果有一个解,可以在多项式时间内验证该解的正确性。然而,尚未找到多项式时间复杂度的算法来解决这些问题,因此它们被认为是比较困难的问题。
听起来p和np有些容易混淆?
确实如此,因为p问题本身就是np问题的子集,即所有的p问题也是np问题。
但目前尚不清楚p问题和np问题之间是否存在严格的相等关系,即p=np还是p≠np。
这是著名的pvsnp问题,它是计算机科学领域中最重要的未解决问题之一。
解决pvsnp问题将对计算复杂度理论和算法设计产生重大影响。
如果p=np成立,那么意味着存在多项式时间复杂度的算法来解决所有np问题,从而具有广泛的实际应用;
而如果p≠np成立,那么np问题在计算将更加困难,需要使用更加高效的算法和技术来求解……)
-
而说到算法复杂度本身,计算复杂度是衡量算法执行时间或空间需求的度量标准。
它描述了算法运行时间或空间使用量随输入规模增加时的增长度。
计算复杂度是对算法效率的一种度量,可以帮助我们比较不同算法之间的效率,并选择最适合特定问题的算法。
常见的计算复杂度包括时间复杂度和空间复杂度。
时间复杂度是描述算法执行所需的时间量。
它通常用大o符号表示,表示算法执行时间随着输入规模增长的界。时间复杂度可分为以下常见类别:
常数时间复杂度:o(1),算法的执行时间与输入规模无关。
线性时间复杂度:o(n),算法的执行时间与输入规模成正比。
对数时间复杂度:o(1ogn),算法的执行时间随输入规模的增加而增加,但增长率较慢。