再见
RSA算法中的数学编程问题
素数的概念,最大公约数 欧几里得算法(Euclid)可以计算GCD(a, b) 扩展欧几里得算法(Extended-Euclid),可以 计算 ax + by = gcd(a, b)中的x, y 大整数的运算 素数的判定 随机数的产生
大素数的查找 整数的模幂,即计算 am mod p
求a x + by = 1的解, 即 a ^ -1 mod b
扩展Euclid 算法
extended_euclid(a, b) { if(b == 0) return(a, 1, 0); else{ let a = kb + r; (d, x, y) = extended_euclid(b, r); return (d, y, x-ky); } }
多次选择a。如果witness(a, n) 返回true, 则n一定不是素数。如果返回false,则n 不是素数的概率小于 ½ 只要测试的次数足够大,则可以相信该 数为素数 Rabin-Miller算法是Nist 推荐的素数检测 算法
梅森素数(Mersenne)素数
p 为素数, Mp = 2p -1,如果Mp也是素数, 则称Mp 为梅森素数 如 p = 2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127等都是梅森素数 但 p = 23时不是
素数的分布(大约的)
1´1 6 0 800 000
600 000
400 000
200 000
200 000
400 000
600 000
800 000
1´1 0
6
n位十进制数的密度为1/nln10。N=100 时,1/nln10 ≈ 1/230 估算100位的整数,要判定是否整数,要 做多少个除法运算