- 模运算
模运算很有用, 最常用的是钟表.
还有二进制负数的补码, 有2n 个数, [-2n-1 , 2n-1 -1]
正数当然直接表示成2进制即可, 对于负数就需要用补码, 即[1, 2n-1 ] 的二进制表示的取反再加一.
以前对这个补码不理解, 所以也一直记不住, 其实:
Any number in the range -2n-1 to 2n-1 - 1 is stored modulo 2n. Negative numbers -x therefore end up as 2n -x.
原来如此.
模运算对于加,减,乘,指数运算, 都很容易理解, 也都可以先进行模运算再加减乘. 就是除比较复杂, 后面会谈到.
- 最大公约数-euclid算法
Euclid's rule: If x and y are positive integers with x >= y, then gcd(x, y) = gcd(x mod y, y)
对于这个的证明, 用反证显而易见.
我们还可以得到以下定理:
Lemma: If a > b, then a mod b < a/2.
这个的证明分为两种情况b>a/2, ba/2的时候, a mod b < a/2是显然的.
有了这个定理, 我们可以知道euclid算法每次递归都会做x mod y, 因为x mod y < x/2, 所以每次递归x的位数都会减1(2进制).
所以euclid的算法最多需要递归len(x)+len(y), 即2n次
而每次递归都要做个除法算x mod y, 这个是O(n2 ), 所以算最大公约数是O(n3 )的.
扩展euclid算法由上面的算法我们可以算出两个数的最大公约数, 但是如果给出d是最大公约数, 怎么验证呢.
证明: 首先d<= gcd(a, b)的, 这个显然. 而d = ax + by, ax + by是可以整除gcd(a,b)的, 所以d也可以整除gcd(a,b), 即d>=gcd(a,b). 得证.
扩展euclid算法就是可以证明在用euclid算法算最大公约数的时候可以一起算出x, y. 所以x, y是一定存在, 且可以找出的.
模除法4* 1/3 mod N, 4 mod N是没有问题的, 那么1/3 mod N应该怎么算了, 这个确实看上去没法算.
3* 1/3 = 1 (mod N), 把1/3换成x, 3x = 1 (mod N), 而 x = 1/3 (mod N), 所以我们只需求出x的整数解.
We say x is the multiplicative inverse(乘法逆元素) of a modulo N if ax = 1 (mod N).
而这个x是否能解出是有条件的, 比如2x = 1 (mod 6)就无解.
ax + Ny = 1 (互质, 所以最大公约数为1), 两边mod N
ax = 1 mod N, 而这个x是可以通过扩展euclid算法求出的, 所以复杂度也是O(n3 )的.
ax mod N = ax - KN = 1, 两边除gcd(a, N)
而ax-KN/gcd(a,N)一定是个整数, 所以1/gcd(a,N)也一定是个整数, 所以gcd(a, N)只能为1.
质性判定Fermat's little theorem If p is prime, then for every 1 <= a < p,
ap-1 = 1 (mod p):
证明: 我们可证(p-1)!*ap-1 = (p-1)! (mod p) 是成立的. 对p取模, 余数的可能性为[1,p-1]
S = {1, 2, ... , p-1} = {a 1 mod p, a 2 mod p, ..., a * (p - 1) mod p} 可证这两个集合是一样的
由于P是质数, p和[1,p-1]中的数都互质, 所以上面的式子两边都除(p-1)!, 得证.
但费马小定理只能保证质数都满足这个条件, 但不能保证满足条件的都是质数.
如341 = 11* 31 is not prime, 但它就满足费马小定理
不过这种例子很少见, 称为Carmichael numbers
而且对于合数, 即不满足费马小定理的数, 可以证明至少有一半以上的a值不满足.
所以判断一个数是否为质数, 只需多随机抽取k个a, 来判断是否满足ap-1 = 1 (mod p), 错判的概率为1/2k , k足够大时, 正确的概率很大.
Lagrange's prime number theorem: the number of primes <= x 无限接近 x/(ln x).
也就是说质数是很多的, 于是找质数就是随机生成一个规定长度的整数, 然后判断是否为质, 不是继续找.
公钥加密 RSAProperty: Pick any two primes p and q and let N = pq. For any e relatively prime to (p -1)(q - 1):
The mapping x -> xe mod N is a bijection on {0, 1, ... ,N-1}.Moreover, the inverse mapping is easily realized:let d be the inverse of e modulo (p -1)(q -1). Then for all x {0,...,N- 1},
(xe )d = x mod N:
找两个大质数p, q, 然后N = pq, 找一个e与 (p -1)(q -1)互质.
加密的时候用xe mod N得到x的密文, 所以e, N为公钥, 公开的
d为私钥, ed = 1 mod(p -1)(q -1), 因为e与 (p -1)(q -1)互质, 所以d必有解.
RSA就是机遇大数分解非常的难, 所以你知道N, 但是无法短时间内知道p, q, 即得不到d.
ed = 1 mod(p -1)(q -1), 即 ed = 1+k(p -1)(q -1)
x1+k(p -1)(q -1) - x 可以被p整除, 同样可证可被q整除, 由于p,q都是质数, 所以也可以被N = pq 整除