1. 求最大公约数的两种方法:
第一种,欧几里德算法:gcd(m,n)=gcd(m,m%n);
直到m%n为零时,计算结束,最大公约数为此时的m。
第二种,质因数解法:分别找到m和n的所有质因数,最大公约数就是公共质因数的乘积。
求质因数的方法是“埃拉托色尼筛”:设要求质因数的数为x,将从2到x的每个数存入数组。然后对于数组中满足2<=i<=√n,从i*i开始到n为止,消除是i的倍数的数,剩下的数就是质因数。
A[i]=i;
for(i=2;i<=√n;++i){
if(A[i]!=0)
j=i*i;
while(j<=n){
A[j]=0;
j+=i;
}
}
2. 欧几里德算法是可以扩展的:
可以参照这篇文章:http://blog.csdn.net/Fioman/archive/2008/05/18/2455698.aspx
3. 基本的效率类型:1<logn<n<nlogn<n^2<n^3<2^n<n!
4. 斐波那契数列: F(n)=F(n-1)+F(n-2); F(0)=0;F(1)=1;
递归算法的效率很低,因为有很多函数值被重复计算,复杂度是o(([1+sqrt(5)]/2)^n),很慢;写成非递归的行时候会快很多,成为o(n)级别。使用卡西尼恒等式F(n+1)F(n-1)-F(n)^2=(-1)^n来计算的话,可以达到o(logn)级别。
可参照这里:http://www.360doc.com/content/10/1229/10/5159948_82232380.shtml