zoukankan      html  css  js  c++  java
  • 具体数学-第9课(取整进阶与数论入门)

    今天讲完了取整的最后一部分知识,并给第四章数论开了个头。

    首先还是以一道例题开始我们今天的课程。

    例题1

    求和:
    sumlimits_{0 le k < n} {leftlfloor {sqrt k } 
ight
floor }

    方法1

    首先令 m = leftlfloor {sqrt k } 
ight
floor
    那么有
    egin{array}{l}sumlimits_{0 le k < n} {leftlfloor {sqrt k } 
ight
floor } = sumlimits_{k,m ge 0} {mleft[ {k < n} 
ight]left[ {m = leftlfloor {sqrt k } 
ight
floor } 
ight]} \ = sumlimits_{k,m ge 0} {mleft[ {k < n} 
ight]left[ {m le sqrt k < m + 1} 
ight]} \ = sumlimits_{k,m ge 0} {mleft[ {k < n} 
ight]left[ { {m^2} le k < { {(m + 1)}^2}} 
ight]} \ = sumlimits_{k,m ge 0} {mleft[ { {m^2} le k < { {(m + 1)}^2} le n} 
ight]} \ + sumlimits_{k,m ge 0} {mleft[ { {m^2} le k < n < { {(m + 1)}^2}} 
ight]} end{array}
    我们先算左半部分,先假设 n = {a^2} ,那么有
    egin{array}{l}sumlimits_{k,m ge 0} {mleft[ { {m^2} le k < { {(m + 1)}^2} le {a^2}} 
ight]} \ = sumlimits_{m ge 0} {m(2m + 1)left[ {m < a} 
ight]} \ = frac{1}{6}(4a + 1)a(a - 1)end{array}
    而对于一般的 n ,令 a = leftlfloor {sqrt n } 
ight
floor ,我们只需要计算 {a^2} le k < n 的部分,而这部分 sqrt k = a ,所以结果为 (n - {a^2})a

    所以总的结果为:
    sumlimits_{0 le k < n} {leftlfloor {sqrt k } 
ight
floor } = na - frac{1}{3}{a^3} - frac{1}{2}{a^2} - frac{1}{6}a,a = leftlfloor {sqrt n } 
ight
floor

    这里解释一下为什么没有算右半部分?因为右半部分就是 {a^2} le k < n 的这部分,已经计算过了。

    方法2

    因为 leftlfloor x 
ight
floor = sum
olimits_j {left[ {1 le j le x} 
ight]} ,所以可以将原式替换掉,还是令 n = {a^2} ,然后如下计算:
    egin{array}{l}sumlimits_{0 le k < n} {leftlfloor {sqrt k } 
ight
floor } = sumlimits_{j,k} {left[ {1 le j le sqrt k } 
ight]left[ {0 le k < {a^2}} 
ight]} \ = sumlimits_{1 le j < a} {sumlimits_k {left[ { {j^2} le k < {a^2}} 
ight]} } \ = sumlimits_{1 le j < a} {({a^2} - {j^2})} = {a^3} - frac{1}{3}a(a + frac{1}{2})(a + 1)end{array}
    其中第二行交换了变量计算顺序。

    定理1

    这里直接介绍一个定理,就不证明了,过程比较复杂:
    mathop {lim }limits_{n 	o infty } frac{1}{n}sumlimits_{0 le k < n} {f({ kalpha } )} = int_0^1 {f(x)dx}
    其中 alpha 是一个无理数。

    这个公式说明了,无理数 alpha 的整数倍的小数部分均匀分布在 (0,1) 之间。

    这就给了我们一个启示,我们可以用它来生成随机数啊!其他用处还有很多,自己想咯。

    例题2

    求如下和式:
    sumlimits_{0 le k < m} {leftlfloor {frac{ {nk + x}}{m}} 
ight
floor }
    其中整数 m > 0n 也是整数。

    通过枚举 m = 1,2,3, ldots ,可以发现和式满足如下形式:
    aleftlfloor {frac{x}{a}} 
ight
floor + bn + c
    那么怎么计算出来呢?

    首先做一个变形:
    leftlfloor {frac{ {x + kn}}{m}} 
ight
floor = leftlfloor {frac{ {x + knmod m}}{m}} 
ight
floor + frac{ {kn}}{m} - frac{ {knmod m}}{m}
    这就将原来的和式分为了三个部分求和。

    第一个部分为:
    leftlfloor {frac{x}{m}} 
ight
floor + leftlfloor {frac{ {x + nmod m}}{m}} 
ight
floor + cdots + leftlfloor {frac{ {x + (m - 1)nmod m}}{m}} 
ight
floor
    具体怎么算留到下一章节,这里通过枚举可以发现它的值是有周期的,周期重复次数是 d = gcd (m,n) 。所以算出来结果为:
    egin{array}{l}dleft( {leftlfloor {frac{x}{m}} 
ight
floor + leftlfloor {frac{ {x + d}}{m}} 
ight
floor + cdots + leftlfloor {frac{ {x + m - d}}{m}} 
ight
floor } 
ight)\ = dleft( {leftlfloor {frac{ {x/d}}{ {m/d}}} 
ight
floor + leftlfloor {frac{ {x/d + 1}}{ {m/d}}} 
ight
floor + cdots + leftlfloor {frac{ {x/d + m/d - 1}}{ {m/d}}} 
ight
floor } 
ight)\ = dleftlfloor {frac{x}{d}} 
ight
floor end{array}
    第二个部分为:
    sumlimits_{0 le k < m} {frac{ {kn}}{m}} = frac{ {(m - 1)n}}{2}
    第三个部分为:
    dleft( {frac{0}{m} + frac{d}{m} + cdots + frac{ {m - d}}{m}} 
ight) = frac{ {m - d}}{2}

    所以总的结果为:
    sumlimits_{0 le k < m} {leftlfloor {frac{ {nk + x}}{m}} 
ight
floor } = dleftlfloor {frac{x}{d}} 
ight
floor + frac{ {(m - 1)n}}{2} + frac{ {d - m}}{2}

    这里我们对结果稍稍变形,可以得到另一个结果:
    egin{array}{l}sumlimits_{0 le k < m} {leftlfloor {frac{ {nk + x}}{m}} 
ight
floor } = dleftlfloor {frac{x}{d}} 
ight
floor + frac{ {(m - 1)(n - 1)}}{2} + frac{ {m - 1}}{2} + frac{ {d - m}}{2}\ = dleftlfloor {frac{x}{d}} 
ight
floor + frac{ {(m - 1)(n - 1)}}{2} + frac{ {d - 1}}{2}end{array}
    可以发现, mn 是对称的!所以可以得到如下结论:
    sumlimits_{0 le k < m} {leftlfloor {frac{ {nk + x}}{m}} 
ight
floor } = sumlimits_{0 le k < n} {leftlfloor {frac{ {mk + x}}{n}} 
ight
floor }
    这有什么用呢?当 m 特别大、 n 很小的时候可以大大减少项的个数!

    如果我们令 n=1 ,就会发现,得到的式子和之前证过的一个式子一模一样!
    sumlimits_{0 le k < m} {leftlfloor {frac{ {k + x}}{m}} 
ight
floor } = leftlfloor x 
ight
floor

    到这里为止,第三章取整就讲完了,下面开始讲第四章数论部分。

    数论相关性质

    整除定义

    m|n Leftrightarrow m > 0,n = mk,k in mathbb{Z}
    注意这里整除的定义中要求 m>0

    最大公约数和最小公倍数

    定义我就不说了,大家应该都知道的。

    欧几里得定理

    又叫辗转相除法,就是用来求最大公约数的。
    egin{array}{l}gcd (0,n) = n\gcd (m,n) = gcd (nmod m,m)end{array}

    扩展欧几里得定理

    在用欧几里得定理求到最大公约数之后,反过来可以将最大公约数表示为两个数的线性和:
    gcd (m,n) = m'm + n'n

    性质1

    如果 k|m,k|n ,那么 k|gcd(m,n)

    性质2

    sumlimits_{m|n} { {a_m}} = sumlimits_{m|n} { {a_{n/m}}}
    这个就是用了交换律,按照因子顺序倒过来算。

    性质3

    sumlimits_{m|n} { {a_m}} = sumlimits_k {sumlimits_{m > 0} { {a_m}[n = mk]} }
    这个虽然变成了二重求和,但是对于每个 k ,其实只有一个 m 有效。

    性质4

    sumlimits_{m|n} {sumlimits_{k|m} { {a_{k,m}}} } = sumlimits_{k|n} {sumlimits_{l|(n/k)} { {a_{k,kl}}} }
    这个一眼就不一定能看出来了。

    左边等于:
    egin{array}{l}sumlimits_{m|n} {sumlimits_{k|m} { {a_{k,m}}} } = sumlimits_{j,l} {sumlimits_{k,m > 0} { {a_{k,m}}[n = jm][m = kl]} } \ = sumlimits_j {sumlimits_{k,l > 0} { {a_{k,kl}}[n = jkl]} } end{array}
    右边等于:
    egin{array}{l}sumlimits_{k|n} {sumlimits_{l|(n/k)} { {a_{k,kl}}} } = sumlimits_{j,m} {sumlimits_{k,l > 0} { {a_{k,kl}}[n = jk][n/k = ml]} } \ = sumlimits_m {sumlimits_{k,l > 0} { {a_{k,kl}}[n = mlk]} } end{array}
    可以看出左右两边相等。

    算数基本定理

    一个整数可以唯一表示为若干个素数乘积:
    n = prodlimits_p { {p^{ {n_p}}}} ,{n_p} ge 0
    所以用指数形式来表示一个整数 n ,例如 18 = {2^1} 	imes {3^2} ,那么 18 可以表示为:
    < 1,2,0,0, ldots >
    最大公约数和最小公倍数也能很方便的用指数形式计算:
    其中最大公约数的每个素数的指数等于两个数对应指数最小值,最小公倍数的每个素数的指数等于两个数对应指数最大值。

  • 相关阅读:
    AC自动机
    【洛谷P1972】HH的项链
    【洛谷P4341】外星联络
    【洛谷P4576】棋盘游戏
    【JZOJ3800】败屩妖
    【JZOJ3798】临洮巨人
    【洛谷P3830】随机树
    【JZOJ3799】青蛙神
    牛客练习赛56 题解
    【洛谷P5300】与或和
  • 原文地址:https://www.cnblogs.com/godweiyang/p/12203926.html
Copyright © 2011-2022 走看看