c++求最小公倍數和最小公約數


 

 

方法一:輾轉相除法(歐幾里得 Euclidean)

  用“較大數”除以“較小數”,再用較小數除以第一余數,再用第一余數除以第二余數;

反復直到余數為零為止。

#include<iostream>
#include<algorithm>
using namespace std;

/*其計算原理依賴於下面的定理:

定理:gcd(a,b) = gcd(b,a mod b)

證明:a可以表示成a = kb + r,則r = a mod b 
假設d是a,b的一個公約數,則有 
d|a, d|b,而r = a - kb,因此d|r 
因此d是(b,a mod b)的公約數

假設d 是(b,a mod b)的公約數,則 
d | b , d |r ,但是a = kb +r 
因此d也是(a,b)的公約數

因此(a,b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證
using namespace std;
*/

int gcd(int a,int b)
{
    if(b == 0)
        return a;
    return gcd(b,a%b);
}

int main()
{
    int a, b;
    
    cin>>a>>b;
    int c = gcd(a,b);
    printf("%d",c);
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM