歐幾里得算法又稱輾轉相除法
給定兩個正整數m,n。求他們的最大公約數,算法代碼爲
#include "stdafx.h"
#include<iostream>
using namespace std;
int gcd(int m,int n)
{
int r=n%m;
while(r!=0)
{
n=m;
m=r;
r=n%m;
}
return m;
}
int _tmain(int argc, _TCHAR* argv[])
{
int m,n;
cin>>m>>n;
if(m>n)
{
int temp=m;
m=n;
n=temp;
}
int h=gcd(m,n);
cout<<"最大公約數是"<<h<<endl;
cout<<"最小公倍數是:"<<(m*n)/gcd(m,n)<<endl;
return 0;
}
擴展的歐幾里得算法是:
給定兩個整數m、n,我們計算它們的最大公約數d和兩個整數a和b,使得am+bn=d
算法代碼如下
#include "stdafx.h"
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int m,n,a1,b,a,b1,c,d,q,r,t;
a1=b=1;
a=b1=0;
cin>>m>>n;
c=m;
d=n;
q=c/d;
r=c%d;
while(r!=0)
{
c=d;
d=r;
t=a1;
a1=a;
a=t-q*a;
t=b1;
b1=b;
b=t-q*b;
q=c/d;
r=c%d;
}
cout<<d<<endl;
cout<<a<<" "<<b<<endl;
return 0;
}