1、B密码编码学与网络安全电子工业出版社2006 - 2007B第 8章 数论结论介绍 8.1 素数 8.2 费马定理和欧拉定理 8.3 素性检测 8.4 中国剩余定理 8.5 离散对数问题 * 8.a 计算 XY mod Z B古老的学科,崭新的应用 数论是一门古老的学科。在 RSA算法出现之前,数论这门精巧却枯燥的学问,只是被普通人认为好玩。 RSA算法的出现改变了一般民众对数论的看法。现在,安全的网络活动几乎都在数论相关算法的保护之下,比如 SSL安全传输和网上交易的数字签名。B数 整数负数, 0,正整数(自然数) , 3, 2, 1, 0, 1, 2, 3, 关系整除:因子、倍数如 3|1
2、5, 7|14, 分类合数,如 4、 6、 8、 9、 10、 12、 14、 15、 素数,如 2、 3、 5、 7、 11、 13、 17、 19、 B8.1 素数2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,2
3、93,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,7
4、73,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997B算术基本定理 任一个数总可以写成一系列素数的乘积,而且写法唯一 a p1a1 p2a2 p3a3 ptat 如 36 22323600 243252 素数的判别232,582,657-1, 2006 合数的分解B44th Known Mersenne Prime Found! Lightning strikes twice. On Septem
5、ber 4, 2006, in the same room just a few feet away from their last find, Dr. Curtis Cooper and Dr. Steven Boones CMSU team broke their own world record, discovering the 44th known Mersenne prime, 232,582,657-1. The new prime at 9,808,358 digits is 650,000 digits larger than their previous record pri
6、me found last December. However, the new prime falls short of the 10 million digits required for GIMPS to claim the Electronic Frontier Foundation $100,000 award.B互素 公因子 最大公因子 gcd(a,b) Euclid算法 互素 gcd(.,.) = 1 两个数的最大公因子是 1 可推广到 n个数 素数和谁都互素 除了他的倍数BEuclid算法 辗转相除法求最大公因子的算法 18, 12; 12, 6; 6, 0; 即 6 35, 6; 6, 5; 5, 1; 1, 0;即 1 (互素 ) 即r0 q1r1 r2 55 222 11 35 56 5r1 q2r2 r3 22 211 0 6 15 1r2 q3r3 r4 5 51 0rm-2 qm-1rm-1 rm( rm就是 最大公因子)rm-1 qmrm 0 (即 rm+1)BEuclid算法函数/ return great common divisor int gcd(int a, int b)if (a=0) | (b=0)return a+b;elsereturn gcd(a%b, b%a)