tft每日頭條

 > 科技

 > 一文洞悉python必備50種算法

一文洞悉python必備50種算法

科技 更新时间:2024-12-25 21:48:04

一文洞悉python必備50種算法(50個與數學有關的Python編程)1

點擊頭像,可查看合集

《50個與數學有關的Python編程》介紹

很多青少年在初學編程時,不知道如何練習。算法太高深難懂;應用嘛,内容又太多太雜。筆者認為,與數學有關的編程是再合适不過的。

适合誰?

熱愛編程的青少年,或者剛步入編程的小白。創作完成後,會提供源碼下載。

内容包括:

一文洞悉python必備50種算法(50個與數學有關的Python編程)2

50個與數學有關的Python編程之思維導圖

上一篇(餘數)

<<<正文開始>>>第2節 最大公約數和最小公倍數

最大公約數和最小公倍數是小學的内容。兩個分數相加時,就會用到它。如

先求6和4的最小公倍數,加好之後,再求分子分母的最大公約數。

題1 笨方法

笨方法就是找出兩個數最大值和最小值,從最大值遞增,直至找到最小公倍數;從最小值遞減,直至找到最大公約數。

N = eval(input("請輸入第一個正整數:")) M = eval(input("請輸入第二個正整數:")) ''' #if-else找最大值與最小值 if M > N: max = M min = N else: max = N min = M ''' ''' #三元運算獲得最大值與最小值 min = M if N > M else N max = N if N > M else M ''' #也可以用元組來找最大值與最小值 (min, max) = (N, M) if N < M else (M, N) while True: if max % M == 0 and max % N == 0: break max = max 1 while True: if M % min == 0 and N % min == 0: break min = min - 1 print(max,min)

題2 九章算法

笨方法之所以笨,在于适合計算機,并不适合人。而古代是沒有計算機的。因此《九章算術》給出了一個适合人的比較實用的算法。《九章算術》是中國古代最重要的數學著作。中國古代的數學講究的就是實用。

  1. M和N,大數減掉小小數。
  2. 比較差與小數,再用大數減掉小數,直至為相等。相等的數就為最大公約數。

如:輸入14和6。14-6=8 →8-6=2→6-2=4→4-2=2→2-2=0;2就為最大公約數。最小公倍數為14×6÷2=42。

N = eval(input("請輸入第一個正整數:")) M = eval(input("請輸入第二個正整數:")) (min,max) = (M,N) if N > M else (N,M) while True: max = max - min (min, max) = (min, max) if max > min else (max, min) if min == 0: break print(f"最大公約數是{max}") print(f"最小公倍數是{int(N*M/max)}")

題3 歐幾裡得算法

歐幾裡得是古希臘時代偉大的數學家,其所著的《幾何原本》是平面幾何的基礎。因此我們在中學所學的幾何也叫“歐幾裡得幾何”,簡稱“歐氏幾何”

  1. M和N,且M>N。令 R = M mod N。注意R一定會小于N。(%求餘是編程裡的符合,實際數學用mod)
  2. 繼續求餘,即 N mod R,直至餘數為0。此時除數就是最大公約數。

如:輸入14和6。14 mod 6=2→6 mod 2=0;2就為最大公約數。最小公倍數為14×6÷2=42。

N = eval(input("請輸入第一個正整數:")) M = eval(input("請輸入第二個正整數:")) (min,max) = (M,N) if N > M else (N,M) while True: max = max % min #大數對小數的求餘 if max == 0: break (max, min) = (min, max) #餘數一定會小于除數, #所以直接調換,不用判斷 print(f"最大公約數是{min}") print(f"最小公倍數是{int(N*M/min)}")

兩種算法誰更優秀呢?我恐怕要說是歐幾裡得的算法了。從上面14和6的案例來看,歐氏算法的次數要少很多——也就是循環少了很多。

題4 歐幾裡得算法的遞歸寫法

在很多編程比賽中,遞歸是免不了的。歐氏算法的遞歸往往是一道開胃小菜,因此我們在此編一下。

N = eval(input("請輸入第一個正整數:")) M = eval(input("請輸入第二個正整數:")) #gcd是 Greatest Common Divisor 的縮寫 def gcd(max,min): max = max % min if max == 0: return min else: return gcd(min,max) (min,max) = (M,N) if N > M else (N,M) result = gcd(max,min) print(f"最大公約數是{result}") print(f"最小公倍數是{int(N*M/result)}")

遞歸算法與非遞歸算法,沒有優劣之分。它們循環的次數是一樣的。本人比較反感用多個方法求解一個問題,但做編程練習時,多思考是一件非常好的事情。

有興趣的朋友,可以将九章算法改成遞歸形式。

一文洞悉python必備50種算法(50個與數學有關的Python編程)3

點個關注

上一篇(餘數)

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved