zoukankan      html  css  js  c++  java
  • 数论算法学习初步

    今天开始学习一下算导上的数论算法,做一点笔记。

    一些符号约定:

    d|a 表示d整除a, 模n的等价类 [a]n= {a+kn: k属于Z}, 模n的完全剩余系则是这些等价类的集合 Zn ={[a]n:0≤a≤n-1}

    ,每个等价类都用最小的非负元素来表示则有 Zn={0,1,..,n-1}

    公约数和最大公约数

    a和b的公约数d的定义: d|a 且 d|b。

    重要性质: d是a和b公约数 → d|(a+b)且d|(a-b)。可以推广到a和b的线性组合d | (ax+by),x,y是整数。

    gcd(a,b)表示最大公约数。定义gcd(0,0) = 0(可以使得基本性质普遍成立

    基本性质,比较简单,略

    定理:a和b不全为0,gcd(a,b)是{ax+by: x,y 属于Z}中的最小元素。

    证明思路:最小的线性组合用s表示,证明s≥gcd(a,b) 和 gcd(a,b)≥s。

    1)gcd(a,b)≥s。 只需证明s是a和b的公约数,q = a/s, a%s = a - qs = a - q(ax+by) = a(1-qx) + b(-qy)。

    a%s是a和b的线性组合,s又是线性组合最小的正数,0≤a%s<s → a%s = 0,也就是说s | a。同样可以证明 s | b。

    2)s≥gcd(a,b)。s是a和b的线性组合,由公约数的重要性质,gcd(a,b)|s,且s>0 → gcd(a,b)≤s

    推论: 1.gcd(a,b)是线性组合,所以a和b的任意公约数d,满足d | gcd(a,b)

            2.gcd(an,bn) = n gcd(a,b)。 gcd(an,bn) = min({anx+bny: x,y 属于整数}) = n min({anx+bny: x,y 属于整数}) = n gcd(a,b)

            3.对于任意整数n, a和b,如果n|ab且gcd(a,n) = 1,则 n | b。

    (这个证明是我自己想哒,可能有不严谨的地方。k = ab/n,gcd(a,n) = ax + ny = 1 ,两边乘上k ,akx + aby = ab/n,kx + by = b/n。左边一定是个整数,得到 b/n是整数,所以n | b。我觉得把a,b,n分解了也可以证明,但是似乎没怎么用上定理

    互质数

    gcd(a,b) = 1称a和b为互质数。

    定理:整数a,b,p, gcd(a,p) = 1 且 gcd(b,p) = 1,那么 gcd(ab,p) = 1。

    证明思路:利用之前的结论拆成线性组合做运算 (拆成线性组合对证明太有用辣

    ax + py = 1, bx′ + py′ = 1, 两式相乘整理ab(xx′) + p(ybx′ + y′ax + pyy′) = 1。找到ab 和 p的最小正线性组合 = gcd(ab,n) = 1。

    两两互质,n1, n2 , ... , nk,  对于任意i ≠ j, 有 gcd(ni,nj) = 1,称n1, n2 , ... , nk两两互质

    唯一因子分解定理

    定理:任意素数p,和任意整数a,b, p|ab → p|a 或 p|b。 反证,p的约数只有1和p,如果p¦a且p¦ b,那么gcd(a,p) = gcd(b,p) = 1,推出gcd(ab,p) = 1

    而p | ab 可推出 gcd(ab,p) = p。

    定理:唯一因子分解定理, 合数a的质数分解式唯一。

    转自Matrix大神的证明:http://www.matrix67.com/blog/archives/495

    为了真正地证明,分解质因数的方法是唯一的,我们将再次用到反证法。假设存在某些数,它们有至少两种分解方法。那么根据上文提到的“非空正整数集里存在最小的元素”,一定有一个最小的数M,它能用至少两种方法表示成质数的乘积:
       M = P1 * P2 * … * Pr = Q1 * Q2 * … * Qs
    下面我们将看到,这种假设会推出一个多么荒谬的结果来。不妨设P1 <= P2 <= … <= Pr, Q1 <= Q2 <= … <= Qs。显然,P1是不等于Q1的,不然两边同时约掉它,我们就得到一个更小的有两种分解方法的数。不妨设P1 < Q1,那么我们用P1替换掉等式最右边中的Q1,得到一个比M更小的数T = P1 * Q2 * Q3 * … * Qs。令M’ = M – T,我们得到M’的两种表达:    M’ = (P1 * P2 * … * Pr) – (P1 * Q2 * … * Qs) = P1 * (P2 * .. * Pr – Q2 * … * Qs)  ……  (1)    M’ = (Q1 * Q2 * … * Qs) – (P1 * Q2 * … * Qs) = (Q1 – P1) * Q2 * … * Qs  ………………  (2)     由于T比M小,因此M’是正整数。从(1)式中我们立即看到,P1是M’的一个质因子。注意到M’比M小,因此它的质因数分解方式应该是唯一的,可知P1也应该出现在表达式(2)中。既然P1比所有的Q都要小,因此它不可能恰好是(2)式中的某个Q,于是只可能被包含在因子(Q1-P1)里。但这就意味着,(Q1-P1)/P1除得尽,也就是说Q1/P1-1是一个整数,这样Q1/P1也必须得是整数。我们立即看出,P1必须也是Q1的一个因子,这与Q1是质数矛盾了。这说明,我们最初的假设是错误的。

    练习

    概述,部分条件已省略

    1. a+b % a = a+b - floor((a+b)/a)*a = b

    2. 反证, 假设 pk是最大的素数...

    3. b = k a, c = q b → c = kq a

    4.gcd(k,p) |  k, gcd(k,p) ≤ k < p → gcd(k,p) = 1

    5. 公约数和最大公约数的推论3

    6.这个练习好像可以是证明lucas定理中一个条件。

    需证:(a+b)p=ap+bp mod p。

    二项式展开就好,条件已经给了:0<k<p, p|C(p,k)。

    7.  x mod b = x - floor(x/b) b  ,  ( x mod b) mod a = x - floor(x/b) b - floor ( ( x - floor(x/b) b )/ a ) a。 [1]

    假设b = k a, 那么 ( x - floor(x/b) b )/ a = x/a - floor(x/b) k , 式[1] = x - floor(x/b) - floor( x/a ) + floor(x/b) = x mod a

    9.10.11. (证明。。。

    -------------------下面有些的题要写算法-------------------(待解决,不会

    8. k > 0, ak= n,称n是一个k次幂。如果k > 0, n > 1是k次幂,称n是非平凡幂。如何在β的多项式时间判断β位整数n是否为平凡幂。

    12.设计计算β位整数除以短整数的高效算法,Θ(β2)

    13.2进制转10进制。证明:如果长度β的乘除法的运算时间为M(β),那么2进制转10进制Θ(M(β)logβ)。

    (似乎是分治,T(n) = T(n/2) + ΘM(β) ≈ Θ(M(β)logβ)。

  • 相关阅读:
    C++类中的封装-9
    递归神经网络
    卷积神经网络
    Tensorflow人工智能神经网络学习
    右键弹出菜单 并动态新增菜单子项
    sql 列转行
    sql 删除表中某字段的重复数据
    疑难问题解决
    jquery ashx交互 返回list 循环json输入信息
    jquery 控件赋值
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4892549.html
Copyright © 2011-2022 走看看