離散課上第一次接觸歐幾里得算法,課上并無多講胳徽,知識了解一個大概,隨后幾天學習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)
下面是歐幾里得算法復雜度的解析(非原創(chuàng)聂儒,是根據一個博客得到的,加上一點自己的理解)算是比較能理解的一種解釋
所以歐幾里算法比較高效
下面是歐幾里算法的數學證明(非原創(chuàng)硫痰,比較好理解)
歐幾里得算法的應用
倒水問題解析
有兩個容器衩婚,容積分別為A升和B升,有無限多的水效斑,現在需要C升水非春。 我們還有一個足夠大的水缸,足夠容納C升水缓屠。起初它是空的税娜,我們只能往水缸里倒入水,而不能倒出藏研。 可以進行的操作是: 把一個容器灌滿敬矩; 把一個容器清空(容器里剩余的水全部倒掉,或者倒入水缸)蠢挡; 用一個容器的水倒入另外一個容器弧岳,直到倒出水的容器空或者倒入水的容器滿凳忙。 ? ? 問是否能夠通過有限次操作,使得水缸最后恰好有C升水禽炬。
#include <stdio.h>\\C語言進行編寫(原創(chuàng))
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;
}
歐幾里得是我第一學習的算法涧卵,算法真神奇,這個算法讓我知道了為什么要好好學算法了腹尖,繼續(xù)努力吧~每天學習一個算法