第3章整值函数(IntegerFunctions)鞠成东E-mail:juchd@hrbeu.edu.cnM.P.:152046793362020/7/223.4‘MOD’:TheBinaryOperation‘MOD’:二元运算2020/7/23MOD:二元运算•在正整数m除正整数n时,商可以用取整符号表示为,而余数则记成“nmodm”:•也就是•可将“余数”的计算推广到负整数,乃至任意实数上:•因此mod是一个二元运算,其中后面的数称为模数,前面的数至今尚没有命名。mn余数商mnmmnnmodmmnnmn商余数modyyxxyx商余数mod2020/7/24MOD的直观理解和例子•当x、y为正实数时,如何直观理解xmody的意义?假设有一个周长为y的圆,如果从某个点O开始在圆上绕着移动大小为x的距离,则结束点就是xmody。而且移动过程中扫过O的次数为。•如何理解当x或y是负数时的xmody?先来看一些例子:yx2)3/(5)3(53mod513/5353mod51)3/(5)3(53mod523/5353mod52020/7/25负整数模下的MOD•可以看到,如果模数y取不同的符号,xmody的符号也不相同,但是值均在0和模数y之间:•若y=0怎么办?有人提出,为保持连续性而定义:,可以证明:•但是上面的定义实际用处不大。为保持完整性,CM中定义,也就是说xmody与x之差总为y的倍数。0,mod00,mod0yyyxyyyx对于对于xx0mod0mod0modlim0xyxy如何证明?00modx2020/7/26实数模下的MOD•如果将x分为整数部分和小数部分:,可以发现,小数部分能够表示成xmod1,即注意:mod的运算优先级比+/-高。•能否对上取整函数定义类似mod的运算?G-K-P给出了一个mumble的名字:•看看mumble在圆周模型下的意义:在绕着圆周前进距离x后,为了再次到起始点还需要前进的距离。xxx1modxxxxyxyyxmumble2020/7/27MOD的分配律•分配律是mod运算的重要法则。对所有实数c、x和y有•如果约定mod的优先级比乘法低,则右边可以移去圆括号。分配律的正确性可由定义验证:容易验证模数为零时也成立。)mod()()mod(cycxyxccycxcycxcycxyxcycxyxyxcyxcmod//)/()mod(2020/7/28均匀分组问题•下面讨论常遇到的实际问题:n个东西分到规模尽可能均等的m组。例如将n行文字排成m列,为整齐起见,列的长度依次递减,任意两列行数之差不超过1。例如37行排成5列,显然右边更美观:3224160831231507302214063729211305362820120435271911033426181002332517090158888行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行1608373023150736292214063528211305342720120433261911033225181002312417090177788行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行行2020/7/29分组问题的要求•附加要求:按列优先的顺序排列各行文字:先放第1列,再放第2列、第3列等等,才符合阅读习惯。•如果按行优先排列各行文字,能够得到右边的排列结果(每列的行数是正确的),但是各行文字的顺序不对。(列1将包含行1、6、11、···、36而不是正确的行1、2、3、···、8。)•如果n不是m的倍数,每个较长的列应该包含行,而每个较短的列应该包含行;较长的列有nmodm个,而较短的列有nmumblem个。mn/mn/2020/7/210分组问题的解决思路•下面用“东西”和“组”来代替“行”和“列”,即可得到对一般化问题的解决方法。•按照刚才的思路,首先,第1组应包含件东西。然后,接着要处理的问题就是把剩下的东西再“均匀地”分到m–1组里面。很好,我们很容易想到这带有“递归”的色彩。因此后面的分配也同样每次仅考虑剩下的“第1组”。•重复下列过程:把余下的n’=n-个东西放入m’=m-1个其他组中,直到m=0为止。mn/mn/2020/7/211分组问题的例子•例如对n=314和m=6,我们得到的分配方案如下:•显然符合要求。也就是说,尽管模数一直在变,但是仍然取得了规模“平均”的分组方案。52152522104523156524208535261536314/组数东西数剩余组的数量剩余东西数量2020/7/212MOD分组方法的正确性分析•假设n=qm+r,其中q=,r=nmodm。a)如果r=0,先把q件东西放入第1组,再用n‘=n-q替换n,剩下的n’=qm‘件东西放入余下的m’=m–1组……此后的分配也是每次放入q个东西。结果正确。b)如果r0,先把=q+1件东西放入第1组,再用n’=n–q–1替换n,剩下n’=qm’+r–1件东西放入其余m’=m–1组。对n’和m’,可验证新的余数为r’=r–1,但是q未变。依次分配,可得到包含q+1件东西的r个组,以及包含q个东西的m–r个组。结果也正确。•怎样快速计算第k组中有多少件东西?提示:按照k与r的大小关系分情况讨论。mn/mn/mkn12020/7/213MOD表示下的分组过程•根据我们得到的在k上的直接计算公式,可以用下面的等式表示出将n划分成以大小递减、且基本上均匀的m个部分的过程:事实上我们在前面已经遇到过m=2的情形:mmnmnmnn1122212nnnnn2020/7/214递增次序下的分组•如果希望分组的规模是递增的,也就是说小组在大组之前,可以用相同的方法完成,只是在第一组中放入件东西。相应地,可以得到相同形式的等式如下•问题:如何证明下式成立?mnmmnmnmnn11mmnmnmnmmnmnmn11112020/7/215在实数上的推广•来看一个让人惊讶的美妙等式。如果用替换前面的n,我们会得到一个关于所有实数x的等式:•惊讶不?我们知道,实数的下取整是它的整数近似值,等式左边只有一个近似值,却恰好等于右边好多个近似值之和。•如果粗略地假设约为x-1/2,则左边约为mx-1/2,右边约为(x-1/2)+(x-1/2+1/m)+···+(x-1/2+(m-1)/m),两边的粗略近似值恰好相等。mxmmxmxxmx11x2020/7/216在实数上的推广之证明•回忆前面学到的知识(?),我们可以移去下取整符号内部的下取整符号。这样就证明了前面的等式:mmxmxxmmmxmmxmmxmmmxmmxmmxmx1111112020/7/2173.5Floor/CeilingSums下取整/上取整的求和2020/7/218下取整/上取整的求和•前一节已经看到,对涉及取整符号的求和,有时可以得到封闭形式解(当然,解有可能用取整符号表示):•本节将探讨若干情形下、涉及取整的求和问题。•对涉及取整符号的大多数求和问题,一般的计算技巧是引入新的变量,以此去掉取整符号,并将取整求和转化为普通的求和问题。•右侧的求和问题有没有封闭形式解?mmxmxxmx11nkk02020/7/219平方根取整求和:方法1•直接从含有取整符号的式子无法入手,让我们尝试引入新的变量。•方法1:首先引入变量,然后得到kmmkmkmkmkmknkmnkmmnmkmmmkmnkmmkmnkmkmnkmk,022,022,022,0,00)1()1()1(12020/7/220平方根取整求和:方法1•两个求和的分项都是依赖于n的。n的值决定了求和上下界,设有,此时第1个求和变为2301201202022,0222233232322)1()1(mmmmmmmmmmmmmmkmmmmmmkn2020/7/221平方根取整求和:方法1•对第2个求和项•显然有,因此求和可化简为•最后,合并两个求和项的值,即可得到总的求和2022,022)1()1(nnkmnkmmkmkmkmnkmm,022)1(mnn这里,612131232020/7/222平方根取整求和:方法2•方法2使用一个基本的变换•还是令,求和可化简为jxjx1n612131)1)(21(3110101232321222122,2,2,0nnnjnkjnkkjkkjnkkjkjjkkjkjkjnk2020/7/223作业•基础题:3.10、3.12、3.14•作业题:3.19、3.23、3.31