龙空技术网

(三)算术公理系统之:整数

good理科生 503

前言:

而今兄弟们对“特定整数划分算法”大概比较重视,看官们都需要分析一些“特定整数划分算法”的相关知识。那么小编同时在网络上汇集了一些有关“特定整数划分算法””的相关文章,希望我们能喜欢,各位老铁们快快来学习一下吧!

自然数浑然天成人间易得,但光有自然数还不足以应对纷繁复杂的日常生活,生活中有的人有钱,有的人没钱,有的人不仅没钱还欠钱,假定都是整钱,有钱用自然数表示,没钱用0表示,那么欠钱呢?欠钱用负数表示,什么是负数,负数又从哪来呢?相对于自然数,负数并不自然,是一种新数,它对应着一种新的运算,即减法运算。基于加法我们这样来定义减法:

若x+y=z,则x=z-y,减法是加法的逆运算,称为加减变形公理。

注意,在定义减法时并没有将其局限于已知的数,而是不加限制地认为它对任何可能的数都有效,包括0、∞和自然数,也包括后面要讲到有理数、无理数和实数;也没有规定说只能大数减小数,不能小数减大数。法无禁止即是自由,这一点很重要,切不可做给数学上枷锁的傻事,如康托尔所说,数学的本质就在于它的自由,给数学上枷锁,其结果终究是给人类自己上枷锁。

据此令x+n=0,则有x=0-n,当中的n可以是任何可能的数,就目前来说只有0、∞和自然数。由于自然数和∞都大于0,可以想见0-n得到的数x肯定不同于原来所有的数,这时我们有意或无意地把0和∞忽略,将0-n记作-n,即0-n=-n,其中n为自然数,并给这样的数取个名字叫做负数,负数就从这来,它是引入减法之后的必然产物,在所有算术运算中,减号即负号,负号即减号。有了负数,准确说是负整数,之前的自然数,放在一个更大的范围里,就不叫自然数,而称为正整数。0既不属于正整数,也不属于负整数,正整数、负整数和0统称为整数。这是一个已经被奉为常识的说法,小学生都懂的,但这个说法是否准确可以再讨论。

定义和公理是一切数学的出发点,自然也是我们思考和讨论各种数学问题时的出发点。那么严格按照负数的定义来看,负数是与某数相加为0的数,或者说负数是由0减去一个已知数所得的结果,0减自然数n得到-n,同理,0减0得到-0,0减∞得到-∞,-0和-∞都严格遵循负数的定义而产生,是铁板钉钉的数。如果说对∞是不是一个数还存有疑虑,姑且不去论它,0是一个数,则毫无疑问,那么给0加上负号,它满足:0-0=-0,0+(-0)=0,-0=0,于是“-0”作为一个可以运算的符号,称其为数,乃妥妥的实至名归。

接下来把所有这些数按正负号分开排列,为了突出重点,暂不考虑∞和-∞:

0、 1、 2、 3、 …

-0、-1、-2、-3、 …

这时我们还能单独将0拎出来说整数分为正整数、负整数和0吗?有负0存在,将它郑重地考虑进来,带负号肯定是归到负整数,那么跟它相对的正0(0写全了应该是+0)归到哪呢?——还用说嘛,当然归到正整数。所以关于整数准确的说法应该是,整数分为正整数和负整数,正整数包括{0、1、2、3、…},负整数包括{-0、-1、-2、-3、…}。之前的说法无疑是完全忽略了-0的存在,加上-0=0,导致我们在实际运算中几乎觉察不到它的存在,有它和没它运算结果基本不受影响,既然不受影响,那忽略不就忽略了,但要完整而深入地理解数,恰恰不能忽略它的存在。而忽略的后果又异常严重,是人们料想不到的。

如若对此表示摇头,不能理解,多半是因为还没有真正搞懂什么是负数,不曾想过从负数的定义出发,-0也是一个正儿八经的数,尽管-0=0,但相等并不意味着两个数必须完全一致,一致到是一个数,否则使用等号只能有x=x,而不能有x=y的表述。总之在负0面前,我们应该检讨,众目睽睽之下藏着这么一个斗大的数,怎么就没人发现呢?

有了减法,我们对大于、小于和等于可以做进一步理解,根据

等身公理,x=x

0加公理,0+x=x

以及减法的定义,可以得到x-x=0,那么

若x=y,则有x-y=0,即两个数相等则它们的差为0,反之亦然,若x-y=0,则有x=y,两个数的差为0则它们相等。

仿此,1>0,那么1-0,不能等于0,不能小于0,只能大于0,即1-0>0,

那么,若x>y,则有x-y>0,反之亦然,若x-y>0,则有x>y,

对于小于符号“<”也是这样,若x<y,则有x-y<0;若x-y<0,则有x<y。

判断两个数的大小,通常使用的算术方法就是看这两个数的差是否为0,5-3>0,说明5比3大;反之,3-5<0,说明3比5小;3-3=0,两个3相等。那么0与-0谁大谁小呢?因为-0的定义就是0-0,0减去0只能是0,即-0=0。于是数的大小与算术运算找到了对应关系。

既然0-0=0,那么∞-∞=?,这个问题有点烧脑,按照∞加公理,∞+x=∞,以及减法的定义得到,∞-∞=x,这个与由0加公理得到的x-x=0,是否相矛盾呢?一个数自己减去自己,还能不等于0吗?一个数自己跟自己比较还能不相等吗?回答是不矛盾,但又确实存在这样一个数不能简单的自己跟自己比较,比较结果为x,说明可以相等也可以不相等,这个数就是∞。

∞与普通数的根本区别可以这样来理解:对于任意一个普通数a,a-a=0,并且a-a≡0,a减a等于0,并且a减a恒等于0;但对于∞来说,∞-∞=0,并且∞-∞!≡0(不恒等于符号应该用≡加斜杠/来表示,但是“!≡”方便输入,所以先用着),∞减∞等于0,并且∞减∞不恒等于0,因为∞-∞=x,x可以是任何数。

整数是在减法基础上对自然数的扩展,从正方向扩展到负方向,相当于把自然数整个复制一份放置到相反方向,按常识理解这会儿整数的个数应该有自然数个数的两倍才对,但无穷无尽的自然数翻一倍到无穷无尽的整数,还是无穷个,∞×2=∞,居然没有变化。大概到了无穷这个级别,数量的增加已经没有意义了。其实根据∞-∞=x,说整数跟自然数一样多,即∞-∞=0,没问题;说整数比自然数多无穷个,即∞-∞=∞,也没问题;甚至说整数比自然数少无穷个,即∞-∞=-∞,也对。——怎么说都对,这不见鬼了吗?!对于拥有无穷数量的对象,欲通过数字的大小来比较对象的多和少,已经没什么价值。康托尔一度也很纠结这个问题,经过苦思冥想,提出以对应的方式来重新定义无穷对象数量的大和小,由此开创了集合论和超穷数理论,他是如何做的呢?

我们知道数字被发明出来,最直接的用处是计数,通常称为数数,幼儿识数基本上都是从数数开始。要计数,首先要明确计数对象,对谁进行计数?对周围的人,对手指脚趾,还是篮子里的鸡蛋,这就涉及集合的概念。集合是什么?集合所回答的问题是:“对象是哪些?”,回答这个问题旨在明确计数对象。而集合的作用相当于在我们的头脑里画出一个圈,将思考或讨论所涉及的对象都放进这个圈里,并给这个圈命名,比如A或者B,当提及这个名字的时候,我们都知道言之所指的是哪些对象。意即,集合是包含确定对象的全体,而构成集合的对象则称为元素。集合概念的提出极大节约了人们的认知和沟通成本,它的提出者康托尔可以说居功至伟。

有了集合,如果只考虑一个集合,不会有啥问题,当面对两个集合时,问题就产生了,哪个集合中的元素多,哪个集合中的元素少?元素多的为大,元素少的为小,如何比较两个集合的大小呢?我们知道,数是用来标定多少、比较大小的,如果没有数,或者不知有数,又或者在明知有数而不用的情况下,我们又如何比较它们的大小呢?这时要用到“1对1”的方法。

据说,著名的《荷马史诗》中记载了一个则盲人牧羊的故事:独眼巨人波吕斐摩斯仅有的一只眼也被奥德修斯刺瞎,成为盲眼巨人。盲眼巨人眼盲心不盲,他每天坐在山洞口照料他的羊群,早晨羊儿外出吃草,每出来一只,他就摸索着捡起一粒石子放在身边;傍晚羊儿返回山洞,每进去一只,他就扔掉一粒石子,当把早晨捡起的石子扔光时,他就确信羊群中的羊全部返回了山洞。很显然,故事中的盲眼巨人,不必知道羊群中有多少只羊,以及他捡起的一堆石子中有多少粒石子,他只需要将羊群中的羊与石堆中的石子“1对1”,一只羊对应一粒石子,一只羊对应一粒石子,对完了,结果自然明了。如果石子有剩,说明羊少了;如果羊有剩,说明可能生小羊了;如果羊和石子都没有剩,刚好一一对应,则两者一样多。盲眼巨人就是在使用“1对1”的方法比较两个集合的大小,整个过程不涉及数,所以巨人即便眼盲再加数盲,照料好羊群亦无大碍。

所谓“1对1”,就是将A、B两个任意的集合放一起,使之处在同一时空当中,然后将A中的元素与B中的元素建立起一个对一个的映射关系。由于A中的元素无序,B中的元素也无序,那么在A、B对应时,则不要求特定的元素对特定的元素,比如A中a1不是只能与B中的b1相对,它也可以选择与b2相对,一旦选定,它就不能再与B中的其他元素相对。对下来的结果,只有三种可能:A>B,即B中的元素对完了,A中有剩余,余多少不考虑;A<B,即A中的元素对完了,B中有剩余,余多少不考虑;A=B,即A与B中的元素一一对应,都没有剩余。“1对1”的结果也可以粗分为两种:一一对应和非一一对应,有时为了强调结果的一一对应,也把“1对1”方法称为“一一对应”。

所谓计数,则是借助“1对1”的方式,将对象跟数联系起来,在知道对象“是哪些”之后来回答对象“有多少”的问题。此时的“1对1”不再是未知对未知、无序对无序,而是未知对已知、无序对有序。其中这个已知、有序的集合便是一把标有刻度的尺子,可以用它来测量未知集合,使未知变成已知。计数就是以某个数的集合作为“1对1”的一方,来测量另一方。常用的有自然数集、有理数集、实数集。对于简单的计数,首选自然数集N={1,2,3,…}。

现在我们用自然数集替换掉盲眼巨人手中的石子,来数一数他的羊群里有多少只羊。由于自然数集中的元素是有序的,1<2<3<4<5<…,那么我们在将羊群中的羊与自然数集中的数一个对一个时,也要遵循这个次序,出第一只羊对1、再出一只羊对2、再出一只羊对3、…,从山洞走出最后一只羊时,如果对的是10,则说明羊群里有10只羊,计数的结果就是10。

整个计数过程,从1数到10,依次取自然数集中的元素,对应的正是自然数的生成和累加过程,即持续加1。我们可以用计算机编程语言来描述这个过程。令计数结果为r,并且r的初始值为0,每映射一次,则执行一次r=r+1(这里的“=”是计算机编程语言中的赋值符号,意思是将右边的值赋给左边的变量,而不是算术中的“=”表示左右两边相等),将此过程展开来看:

很明显,计数本质上就是将集合中的元素映射到数以及数的运算,并最终得到一个数,这个数即是该集合元素的个数,亦即集合的大小。而单纯的映射呢,只是将一个集合的元素映射到另一个集合的元素,两个集合之间没有本质差别:

将羊群映射到石子

这张图描绘的便是盲眼巨人早上将羊群映射到一堆石子的过程,从羊群到石堆,从一个集合到另一个集合,其间丝毫没有涉及数,所以映射的结果,盲眼巨人并不知道羊群里有多少只羊,或者石堆中有多少粒石子,他手里只是得到了一个羊群的副本,这个副本与真实的羊群相比,除了数量相等,还有一个很大的优点,羊会乱跑,石子不会,可以说聪明的盲眼巨人利用石子对羊群进行了一次抽象,将羊群简化为了石子。

呆到傍晚羊群返回山洞,盲眼巨人需要将这时的羊群与早上羊群的副本即石堆,进行“1对1”比较,看羊有没有乱跑。这就涉及如何比较两个集合的大小。早上将羊映射到石子,盲眼巨人是捡石子,放出一只羊捡一粒石子,最终得到一堆石子,现进一步将这堆石子抽象为一个集合N,将傍晚的羊群抽象为一个集合M,然后比较M和N的大小。

盲眼巨人虽然不识数,但只要有最基本的有和无的概念,是容易做到的。他可以把M、N两个集合放在一起,一只手从M中取元素,另一只手从N中取元素,一次取出一个元素,两只手同时取,于是两个集合中的元素同时减少,都是一次少一个。只要M和N中都还有元素可取,盲眼巨人就一直取下去,取了多少次他可以不管,直到出现至少有一个集合没有元素可取为止。假如M中还有元素,N中没有元素,即可得出M>N。

同时让两个集合中的元素等量减少,谁先减少到无谁就小,同时减少到无就是一样大,这是最原始最朴素的比较两个集合大小的方法。只须知道有和无,就能判断两个集合的大小,这种方法最大限度地规避了对数的认知,确实非常高明。这种方法对我们来说有一个堪称经典的应用,即老师上课点名:一个班50个学生,满勤的话,刚好坐满教室里的50个座位,学生和座位一个对一个,如果有缺勤,老师轻轻瞄一眼有没有空位就知道了,而不用一个同学一个同学去数,可见它的效率在特定场景中是极高的。

对于这个高明的方法,我们可以再抽象,抽象为一个算法过程,它有输入有输出:

第一步,输入两个数m、n,并且m、n都是大于0的自然数;

第二步,m、n分别减去1,得到新的m、n,即m=m-1、n=n-1;

第三步,分别比较m、n与0的大小,如果m、n都大于0则返回执行第二步,如果m或者n等于0,则进入下一步;

第四步,如果m>0,n=0,则输出m>n;如果m=0,n>0,则输出m<n;如果m=0,n=0,则输出m=n。

不难看出这个算法的核心是m=m-1,或者写成r=r-1,与之前的r=r+1刚好相反,前者是加法过程,后者是减法过程。如果将r=r+1称为计数,那么r=r-1就是逆计数。

不论计数还是逆计数,“计”的过程即是映射的过程,“计数”即是映射到数,没有数就没有计数,这是一个不需要解释的简单道理。盲眼巨人不识数,他将羊群映射到石子,通过石子来管理羊群的数量,虽然方便可行,但这不叫计数,这是纯映射。羊群的数量,羊群自身不能说明,映射到石子,石子也不能说明羊群的数量,石子本身的数量仍然需要有数才能得以说明。把羊群和石子换作集合,意思就是,集合中元素的数量,集合自身不能说明,也不能由另一个集合来说明,只能由数来说明。没有数,单纯通过映射,从一个集合跳转到另一个集合,即便再跳转也没用,我们将永远不知道集合中元素的数量。

这里需要明白一个道理,数是抽象的。集合也抽象,但相对于数来说,集合仍然是具体的。我们知道集合由元素决定,有什么样的元素则有什么样的集合,元素一旦确定,元素所属的集合也就确定,元素一旦确定,元素的数量也就确定,集合的大小也就确定。不论是羊群、石堆,还是抽象的一个集合M,集合一旦确定,与生俱来的集合身上所固有的一个数也就确定,集合中的所有元素即是该数的实例。数是抽象的,数的实例是具体的,不能将数的实例等同于数自身,数不是实例,也不是集合,尽管数可以构成集合。

要弄明白数是什么,或许还真不是一件容易的事情。我们从小第一次接触数,往往会被告知,1就是一个苹果,2就是两个苹果,一个苹果就是1,两个苹果就是2,这时我们对数的认知可以概括为,数即对象,对象即数,数与具体对象不作区分。稍微往后,我们知道1不仅是一个苹果,而是一个人,一块橡皮,一只蚂蚁,一片树叶,一分钟,一小时,是所有这些可以用1来表示的对象的共同属性,数与具体对象有所区分。最后我们才会认识到,数是可以运算的符号,它只存在于在数与数的运算当中,与对象无关。这就是人们对数的认知,从具体到抽象,要经历的3个阶段:

1、数即对象,对象即数;

2、数是各种对象的一个共同属性;

3、数是可以运算的符号。

对于一个接受现代教育的人来说,小学毕业就应该达到第3阶段的认知水平。那么我们站在今天,回望150年前,来看康托尔以及康托尔所处的那个时代,他们对数的认知是哪个水平呢?可想而知,以康托尔为代表的知识精英,对于普通数的认知,大概都能达到第3阶段的认知水平。但是对于无穷,还处在第1阶段的前阶段,或者称为第0阶段。自亚里士多德以来,人们对无穷的讨论都是基于某个具体的过程,这个具体过程只能是不可完成的潜无穷过程,还不能是可完成的实无穷过程,都是在讨论对象,而不是在讨论数,无穷不是数,至今仍是普遍共识。康托尔是把无穷当作数来研究和讨论的第一人,为此他创制的方法是集合论,收获的成果是超穷数理论。

标签: #特定整数划分算法