主要是面向新手,順便鞏固一下我的概念(〃'▽'〃)
題目描述
求兩個數m和n的最大公約數。((m>0,n>0))
輸入
輸入二個數,即m和n的值。
輸出
輸出最大公約數。
法1(參考《信息學奧賽一本通》)
求任意兩數(假設是n,m)的公約數,公約數最大可能就是較小的那個數(假設為m),最小為1。所以可以先設最大公約數gys=m。如果gys>1,且沒被n,m整除,則gys-1,繼續執行綠色部分~
注意在搜尋之前要先比大小,把大一點的數放前面。因為我們默認公約數最大可能就是較小的那個數,較小的那個數放后面,所以用三目運算符交換處理了
法2(參考《信息學奧賽一本通》)
法1只能通過一直-1來搜尋,是不是太慢了?如果是一千億和一千萬億來找公約數時間很有可能就不夠了!!!∑(゚Д゚ノ)ノ,不過沒關系,前人已經給我們找到了一種方法——輾轉相除法(歐幾里得算法)歐幾里得算法不再贅述,百度詞條傳送門<---------
用n和m表示被除數,除數,r表示余數,n和m的最大公約數=m與r的最大公約數。算法如下
- 求n%m的值r
- 如果r!=0,執行3。r=0則m為最大公約數,return 0;
- 以m的值作為新n,r的值作為新m,執行2
法3:遞歸
參考法2一定能看懂,不懂在評論區問我就可以啦( • ̀ω•́ )✧