【數學問題】最大公約數與最小公倍數

Curtis_發表於2019-03-21

一、最大公約數:

輾轉相除法

①、遞推式:gcd(a,b)=gcd(b,a%b);

②、遞推邊界: gcd(a,0)=a

 

1、函式: 

//求a與b的最大公約數 
int gcd(int a,int b)
{
	if(b==0) return a;
	else return (b,a%b);
}

a,b相對位置無關。

2、完整程式碼:

#include<iostream>
using namespace std;

//求a與b的最大公約數 
int gcd(int a,int b)
{
	if(b==0) return a;
	else return gcd(b,a%b);
}

int main()
{
	int n,m;
	
	while(cin>>n>>m)
	{
		cout<<gcd(n,m)<<endl;
	} 
	return 0;
}

3、結果:

 

二、最小公倍數:

1、常識:

a與b的最小公倍數=a*b / 最大公約數

為了防止溢位,可寫成 a / d * b。(d:a、b的最大公約數)  

2、程式碼: 

#include<iostream>
using namespace std;

//求a與b的最大公約數 
int gcd(int a,int b)
{
	if(b==0) return a;
	else return gcd(b,a%b);
}

//求a與b的最小公倍數 
int lcm(int a,int b)
{
	return a/gcd(a,b)*b;
}

int main()
{
	int n,m;
	
	while(cin>>n>>m)
	{
		cout<<lcm(n,m)<<endl;
	} 
	return 0;
}

2、結果:

相關文章