Practice yourself, for heaven’s sake, in little things; and thence proceed to greater.
-EPICTETUS
算法
欧几里得算法
计算方法可以定义为一个四元组(Q,I,
Ω
,f)。
四元组表示
f((m,n))=(m,n,0,1)
f((m,n,r,1))=(m,n,m除以n的余数,2)
f((m,n,r,2))=(n),如果r=0,否则(m,n,r,3);
f((m,n,p,3))=(n,p,p,1)
java实现
int E_Algorithm(int Num_1, int Num_2){
/*
* 欧几里得算法
* Param:Num_1 正整数
* Param:Num_2 正整数
*/
int Remainder = Num_1%Num_2;
while(Remainder!=0){
Num_1 = Num_2;
Num_2 = Remainder;
Remainder = Num_1%Num_2;
}
return Num_2;
}
算法的特征
一个算法只不过是一组有穷的规则,这些规则给出求解特定类型问题的运算序列;
除此之外,一个算法还有五个重要特征:
1. 有限性
一个算法在有限步骤之后必然要终止。
2. 确定性
一个算法的每个步骤都必须精确地定义。
3. 输入
一个算法有零个或多个输入。
4. 输出
一个算法有一个或多个输出。
5. 能行性(有效性)
一个算法一般可以认为是能行的(或称有效的),能在有限时间内精确地完成。
习题
- (a,b,c,d)->(b,c,d,a),最少的替换次数。
t<-a,a<-b,b<-c,c<-d,d<-t
共5次 - 余数<除数
- 改变E算法,使”m<-n”平凡的替代运算都加以避免。
- 2166和6099的最大公因数
57
int F_Algorithm(int[] Num){
/*
* 欧几里得算法,改编
* Param:Num 正整数数组,大小为2
*/
int flag = 1;
while(Num[flag]!=0){
flag ^= 1;
Num[flag] = Num[flag]%Num[flag^1];
}
return Num[flag^1];
}
完结
2017.3.23