摘要: 耐心的看下去终究会懂的。♦ 我们规定gcd(a,0)=a♦欧几里德算法中需要明确的是,gcd(a,b) = gcd(b,r)证明:设x=gcd(a,b),那么b能整除以x(即b/x没有余数,觉得"整除以"比"整除"更直观,下同)。∵a=bq+r∴r=a-bq∴r能整除以x∴x为b,r的公约数(没有证明是最大)假设y为gcd(b,r),所以x≤y(y是最大的约数!)显然,b能整除以y∵a=bq+r∴a能整除以y.∴y是a,b的约数∴y≤x∴x=y=gcd(b,r)∴gcd(a,b) = gcd(b,r)求两个数的最大公约数——辗转相除法(欧几里德算法) 1 阅读全文
posted @ 2013-03-23 21:50 Norcy 阅读(333) 评论(1) 推荐(0) 编辑
摘要: 站在acm的角度上看,《算法概论》这本书上感觉废话好多。始终觉得学算法的最佳途径就是做题,而不是单纯的看书看伪算法。实现才是王道。快速幂取模,其实也是以前写过的二分求幂,或离散课上的同余幂。以前写的代码版本太乱,现在总结一下,以便以后碰到这类问题能直接对症下药。求b^e mod m,b,e,m都是比较大的整数。递归算法: 1 //快速幂取模 2 int modexp(int b, int e, int m) //b是底数,e是指数,m是模 3 { 4 if (e == 0) 5 return 1; 6 7 int temp = modexp(... 阅读全文
posted @ 2013-03-23 17:48 Norcy 阅读(395) 评论(0) 推荐(0) 编辑