最大公约数与最小公倍数

最近在TC上做了一道题,才发现自己求最大公约数的程序都忘记了,汗颜。

GCD采用辗转相除法,就是求a,b两个数的最大公约数,等于求a与a%b的最大公约数,这样,就可以将大的数据减小。那么什么时候结束呢,当a%b==0时,就说明,此时已经没有办法再将两个数的值变小了,此时b就是所求的最大公约数。

很多人,喜欢先将a,b两个值比较一下,然后,用max%min,当然也可以不用比较,只需要while(b!=0){ c=a ; a=b; b=c%a}即可,最后将a返回;

int gcd(int a,int b)
	{
		while(b != 0)
		{
			int c = a;
			a = b;
			b = c % a;
		}
		return a;
	}

要求最小公倍数,就要先借助最大公约数来求,最小公倍数的值为a*b/gcd(a,b);

若是,多于两个数,那么,最小公倍数的求法就是前两个数的最小公倍数与第三个数的最小公倍数,以此类推;

#include <iostream>
#include <stdio.h>
#include <vector>
#include <stdlib.h>
using namespace std;
int gcd(int a,int b)
{
	while(b!=0)
	{
		int c = a;
		a = b;
		b = c % a;
	}
	return a;
}
int main()
{
	int N;	
	scanf("%d",&N);
	std::vector<int > v;
	for (int i = 0; i < N; ++i)
	{
		int tmp;
		scanf("%d",&tmp);
		v.push_back(tmp);
	}
	int lcm = 1;
	for (int i = 0; i < v.size(); ++i)
	{
		lcm = (lcm * v[i])/gcd(lcm,v[i]);
	}
	printf("%d\n",lcm);
	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值