最小公倍数与最大公约数的三种算法---算法集

题目:输入两个数,求这两个数的最大公约数,及最小公倍数(三种算法)
输入:
Enter a and b:9 27
输出:
最大公约数是:9
最小公倍数是:27

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数。
求最小公倍数算法:
最小公倍数=两整数的乘积÷最大公约数

求最大公约数算法:

(1)辗转相除法:

有两整数 a 和 b:
① a%b 得余数 c
② 若 c=0,则 b 即为两数的最大公约数
③ 若 c≠0,则 a=b,b=c,再回去执行①
例如求 27 和 15 的最大公约数过程为:
27÷15 余 12
15÷12 余 3
12÷3 余 0
因此,3 即为最大公约数

/* 辗转相除法求最大公约数 */

#include<iostream>
using namespace std; 

int main()
{
	int m,n,a,b,c;
	cout<<"Enter m,n:"<<endl;
	cin>>m>>n;
	a=m,b=n;
	while(n!=0)
	{
		c=m%n;
		m=n;
		n=c;
	}
	cout<<"最大公约数是:"<<m<<endl;
	cout<<"最小公倍数是:"<<a*b/m<<endl;
	return 0; 
}

⑵ 相减法

有两整数 a 和 b:
① 若 a>b,则 a=a-b
② 若 a<b,则 b=b-a
③ 若 a=b,则 a(或 b)即为两数的最大公约数
④ 若 a≠b,则再回去执行①
例如求 27 和 15 的最大公约数过程为:
27-15=12( 15>12 ) 15-12=3( 12>3 )
12-3=9( 9>3 ) 9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3 即为最大公约数

/* 相减法求最大公约数 */

#include<iostream>
using namespace std; 

int main()
{
	int m,n,a,b;
	cout<<"Enter a,b:"<<endl;
	cin>>a>>b;
	m=a,n=b;
	while(a!=b)
	{
		if(a>b)
			a=a-b;
		else
		    b=b-a;		
	}
	cout<<"最大公约数是:"<<a<<endl;
	cout<<"最小公倍数是:"<<m*n/a<<endl;
	return 0; 
}

⑶穷举法

有两整数 a 和 b:
① i=1
② 若 a,b 能同时被 i 整除,则 t=i
③ i++
④ 若 i <= a(或 b),则再回去执行②
⑤ 若 i > a(或 b),则 t 即为最大公约数,结束

改进:
① i= a(或 b)
② 若 a,b 能同时被 i 整除,则 i 即为最大公约数,
结束
③ i–,再回去执行②

/* 穷举法求最大公约数 */

#include<iostream>
using namespace std; 

int main()
{
	int m,n,a,b,t;
	cout<<"Enter a,b:"<<endl;
	cin>>a>>b;
	m=a,n=b;
	for(int i=1;i<=a;i++)
		if(a%i==0&&b%i==0)
			t=i;
	cout<<"最大公约数是:"<<t<<endl;
	cout<<"最小公倍数是:"<<m*n/t<<endl;
	return 0; 
}

改进后的:

#include<iostream>
using namespace std; 

int main()
{
	int m,n,a,b,t;
	cout<<"Enter a,b:"<<endl;
	cin>>a>>b;
	m=a,n=b;
	for(t=a;t>0;t--)//减少了计算次数,降低了时间复杂度
		if(a%t==0&&b%t==0)
		break;
	cout<<"最大公约数是:"<<t<<endl;
	cout<<"最小公倍数是:"<<m*n/t<<endl;
	return 0; 
}
发布了106 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43595030/article/details/103756313
今日推荐