摘要: 欧几里德算法(辗转相除法)是计算两个数最大公约数的传统算法,它无论从理论还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来。Stein算法由 J. Stein1961年提出,和欧几里德算法算法不同的是,Stein算法只有整数的移位和加减法。为了说明Stein算法的正确性,首先必须注意到以下结论:gcd(a,a) = a,也就是一个数和他自身的公约数是其自身gcd(ka,kb) = kgcd(a,b),也就是最大公约数运算和倍乘运算可以交换,特殊的,当k=2时,说明两个偶数的最大公约数必然能被2整除。有了上述规律就可以给出Stein算法如下:1.如果A=0,B是最 阅读全文
posted @ 2011-04-20 23:38 wwwwwwwww11we 阅读(580) 评论(0) 推荐(1) 编辑
摘要: #include <iostream>using namespace std;int com(int n,int r){ int i,j,s=1; if(n-r<r) r=n-r; for(i=0,j=1;i<r;i++){ s*=(n-i); while(j<=r && s%j==0){ s/=j; j++; } } return s;}int main(){ int n,m; while(cin>>n>>m){ cout<<com(n,m)<<endl; } return 0;}上面的代码只适合较 阅读全文
posted @ 2011-04-20 23:20 wwwwwwwww11we 阅读(1100) 评论(1) 推荐(1) 编辑
摘要: #include "MyTimer.h"#include <iostream>#include <cmath>using namespace std;unsigned int fib_1(unsigned int n){ if(n<=1) return n; return fib_1(n-1)+fib_1(n-2);}unsigned int fib_2(unsigned int n){ unsigned int f[100]; int i; memset(f,0,sizeof(unsigned int)); f[1]=f[2]=1; for( 阅读全文
posted @ 2011-04-20 22:49 wwwwwwwww11we 阅读(178) 评论(0) 推荐(0) 编辑
摘要: #include <iostream>#include "MyTimer.h"using namespace std;int pow(int n,int k){ if(k==0) return 1; if(k==1) return n; if(k&1) return pow(n*n,k/2)*n; return pow(n*n,k/2);}int power (int n, int k){//经实测,比pow快 int ret = n , a = ret; --k; while (k){ if (k & 1) ret = ret * a; a = 阅读全文
posted @ 2011-04-20 22:43 wwwwwwwww11we 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 因为平时经常要测试代码的执行效率,所以非常需要一个Timer. So,上网搜了下还真有 http://blog.sina.com.cn/s/blog_5fe506110100dgfd.html 在此感谢作者,自己修改了下,收藏。//精确计时类#ifndef __MyTimer_H__#define __MyTimer_H__#include <windows.h>class MyTimer{private: LARGE_INTEGER _freq; LARGE_INTEGER _begin; LARGE_INTEGER _end;public: double costTime; / 阅读全文
posted @ 2011-04-20 22:38 wwwwwwwww11we 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 矩阵乘法: [F(n+1)]=[1 1][F(n) ] [F(n) ]=[1 0][F(n-1)] 结果 F(n+1)=F(n)+F(n-1) F(n)=F(n) 设[ 1 1] [ 1 0]为A 则: F = A^n 所以Fib(n) = F[0][0] 之前不知道斐波那契数的矩阵求法,了解了以后觉得矩阵的时间复杂度和迭代应该一样啊。其实,矩阵连乘的真正威力在于求高效幂的算法。乘法方法有比加法更好的性质,用加法只能利用前两个的值,而乘法却不同,因为乘法有结合律,可以大幅度下降算法的耗时。因为方阵的乘法有结合律,所以A(2)^n=A(2)^(n/2)*A(2)^(n/2),不妨设n是偶数所以. 阅读全文
posted @ 2011-04-20 20:49 wwwwwwwww11we 阅读(337) 评论(2) 推荐(1) 编辑
摘要: 定义: A Mod B=A-(A div B) * B C++表示: a % b = a - b * (a / b)mod 与 & 的转换: x % 2n == x & (2n - 1) 例: (假设x是整数): x % 2 == x & 1 x % 4 == x & 3 x % 8 == x & 7 运算法则: (a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p) % p (a * b) % p = (a % p * b % p) % p (a / b )% p = ((a % 阅读全文
posted @ 2011-04-20 19:52 wwwwwwwww11we 阅读(588) 评论(0) 推荐(0) 编辑