zoukankan      html  css  js  c++  java
  • 白话数论的基石:算术基本定理

    算术基本定理,又称唯一分解定理,作为数论的基石,几乎每一个定理都建立在它之上,该定理讲述了一个基本事实:任何大于1的整数都能被唯一分解为若干个素数的乘积,这些素因子以非减序列排列。

    下面我将尽量以一种通俗易懂的方式或者干脆说是用白话文来证明这个定理。


    我们从两个方向来归约,即首先证明分解为素因子乘积的存在性,即至少有一种方式能将一个整数分解为若干个素因子的乘积,然后我们证明分解(为了方便起见,下文通称为分解)的唯一性,即至多存在一种分解方式,通过双向归约,便可以轻松地知道我们的定理是成立的。证明分别采用强数学归纳法和反证法。

    首先,我们证明分解的存在性,即对于任意的正整数n(n>1)都能分解为若干素因子的乘积。对于归纳基础:2能分解为若干素因子的乘积,这是显然成立的,因为我们都知道2是素数。然后是
    归纳假设:上述命题对于正整数k成立。接下来我们就需要证明在命题对k成立的条件下,对k+1同样成立。注意到k+1要么是素数,要么是合数,如果k+1是素数的话,命题已经成立了,否则k+1是合数,那么其必存在两个因子a和b,使得2≤a,b<k+1。根据归纳假设,命题对a、b成立,因此对命题k+1成立。此外,我们只需要将其素因子从小到大排列起来即是它的非减序列排列。另外多说一句,对于有关正整数n的命题,非常适合用数学归纳法来证明,因为数学归纳法就是关于离散量n的讨论。比如对于一些关于正整数n的猜想,我们常常用数学归纳法来证其真伪。扯远了,回到正题。

    其次,我们证明分解的方式至多有一种,用反证法也就是说,我们假设分解的方式有多种,从而推出矛盾。假设有两种不同的分解方式,想象两串不同素数的乘积,他们彼此相等,我们把两侧相同的素数约去,这样的话,从两侧任意各取一个素数,他们两两互质,而约去相同素因子的两串素数乘积又相等,所以从任一串中取出一个素数,它必然是另一串素数的因子,注意到这是不可能的,因为由素数的定义易知任何一个素数都不可能包含一个不是它本身的素因子。

    至此,我们完成了算术基本定理的证明。
    由算术基本定理,我们可以看到,素数可堪为构造正整数的积木。另外由算术基本定理,可以证明许多有趣的定理,如素数个数的无穷形,√2是无理数,还可以求两个整数的最大公约数和最小公倍数,而且易知两者的乘积即两个整数的乘积。

    最后,它跟我们写程序有关吗?当然了,你想有关就有关:)。比如说我们举一个简单的例子:
    说:求任意一个正整数n(n>1)的素因子有多少个,它们分别是什么?
    那么根据我们的算术基本定理,我们可以写一个这样的程序,这里任然是用白话文的方式描述算法:
    我们用一个A数组维护一个从1—n的素数,素数从小到大依次排列,然后用n依次去除各个素数,如果能整除,则反复地去除该素数(同时更新B数组的信息,B[i]++,i是该素数,这样我们用数组B同时记录了各个素因子是什么,有多少个),直至不能整除为之,然后A数组下标加1,重复上述过程,直至被除数为1,算法结束。

    All Rights Reserved.
    Author:海峰:)
    Copyright © xp_jiang. 
    转载请标明出处:http://www.cnblogs.com/xpjiang/p/4364671.html
  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/xpjiang/p/4364671.html
Copyright © 2011-2022 走看看