返回第21章 P/NP问题的本质  学霸的另类养成首页

关灯 护眼     字体:

上一章 目录 下一页

本站最新域名 m.boshishuwu.com

    如何证明一个数是素数?

    对于这个问题,即便是一个中学生也能很轻松的找到问题的答案。

    素数是指大于1的自然数,除了1和它本身之外,没有其他正因数的数。

    换句话说,素数只能被1和它自身整除,不能被其他自然数整除。素数的特点是只有两个正因数:1和本身。

    而从素数的定义出发的话,就可以通过试除法来验证。

    具体来说可以执行下面的操作:

    步骤1:选择一个大于1且小于待检查数平方根的数作为除数。如果待检查数为n,则可以选择2到√n之间的数作为除数。

    步骤2:将待检查数除以选定的除数。如果除法的余数为,即待检查数能被选定的除数整除,则待检查数不是素数。

    步骤3:如果待检查数不能被选定的除数整除,继续增加除数的值,重复步骤2。

    步骤4:如果在2到√n之间没有找到能整除待检查数的除数,则待检查数是素数。

    不可否认,试除法简单粗暴,但这仅仅限于所要你所要验证的数并不大的时候。

    但当问题变成如何证明一个超大的数(这个数有上千万位是素数的时候,再继续用试除法就显得很呆。

    这里面主要涉及到计算复杂度的问题。

    (计算复杂度听起来是一个计算机方面的问题。

    但正如前面说得那样,现代数学和计算机科学之间的关系早已就是你中有我,我中有你。

    就算是搞数学的,但凡是涉及到利用计算机作为工具来解决问题的时候就不得不考虑周全。

    甚至于很多经典的数学问题其本质上也是计算机问题。

    就比如说七个数学千禧难题之一的p/np问题就既是数学问题,同时也是计算机问题。

    更具体来说,其本质是计算复杂度的问题。

    p指的是可多项式时间内解决的问题,而np是指可多项式时间内验证解的问题。

    p/np问题是计算复杂度理论中的重要问题。它们涉及了算法是否存在有效的解决方法以及在何种时间内可以解决问题的核心问题。

    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(logn),算法的执行时间随输入规模的增加而增加,但增长速率较慢。

    平方时间复杂度:o(n2),算法的执行时间与输入规模的平方成正比。

    指数时间复杂度:o(2^n),算法的执行时间随输入规模呈指数级增长。

    更高阶复杂度如o(n!)(ps:多项式复杂度和o(n^n)(ps:指数复杂度等。

    而空间复杂度是描述算法执行所需的额外空间或内存量。

    类似于时间复杂度,它也用大o符号表示,表示算法所需的额外空间随着输入规模增长的上界。

    理解计算复杂度的重要性在于能够评估和比较不同算法之间的效率,以选择最适合解决问题的算法。

    通常情况下,我们希望选择时间复杂度低且空间复杂度较小的算法,以实现更高效的计算和资源利用。

    计算复杂度还可以指导算法设计和优化,以提高算法的性能和效率。

    而从计算复杂度的角度来说,试除法是一种简单但相对较慢的素数验证方法。

    因为试除法需要逐个检查每个可能的除数,当待检查数非常大时,该过程变得非常耗时。

    试除法的时间复杂度随待检查数的大小呈指数增长,亦即其时阅读模式加载的章节内容不完整只有一半的内容,请退出阅读模式阅读

阅读模式无法加载图片章节,请推出阅读模式阅读完整内容

『加入书签,方便阅读』

上一章 目录 下一页

博仕书屋阅读榜

博仕书屋新书推荐