离散课上第一次接触欧几里得算法,课上并无多讲,知识了解一个大概,随后几天学习C语言过程中遇到,看一本算法入门杂志中有提到,突然有兴趣,开始寻找关于欧几里得算法的一些简单知识,下文文章仅是初学的我关于欧几里得算法的搜集和一些自己的看法
一:欧几里得算法:
想到欧几里得算法最本质的想法就是算最大公因数gcd(a,b) = gcd(b,a mod b),之前大一初学python的时候老师给我们的最初求最大公因数的问题是我那个时候(初学编程)(使用python)
现在使用欧几里得算法进行求最大公约数
def findemax(x,y):
while y!= 0:
t = x%y
x = y
y = t
return x
print(findemax(24,36))
欧几里得算法体现出高效,下面是分析两个代码的算法复杂度,从算法复杂度来直观看其高效
代码1:复杂度很简单:O(n)
欧几里得算法复杂度为O(lgn)
下面是欧几里得算法复杂度的解析(非原创,是根据一个博客得到的,加上一点自己的理解)算是比较能理解的一种解释
所以欧几里算法比较高效
下面是欧几里算法的数学证明(非原创,比较好理解)
欧几里得算法的应用
倒水问题解析
有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。 我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。 可以进行的操作是: 把一个容器灌满; 把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸); 用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。 问是否能够通过有限次操作,使得水缸最后恰好有C升水。
#include <stdio.h>\\C语言进行编写(原创)
int main()
{
int a,b,c;
int t;
scanf("%d%d",&a,&b,&c);
while (b!=0){
t = a%b;
a = b;
b = t;
}
if (b%c == 0){
printf("yes");
}else
{
printf("no");
}
return 0;
}
欧几里得是我第一学习的算法,算法真神奇,这个算法让我知道了为什么要好好学算法了,继续努力吧~每天学习一个算法