码迷,mamicode.com
首页 > 其他好文 > 详细

两数的最大公约数、最小公倍数

时间:2016-02-10 18:46:50      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:最大公约数   最小公倍数   

    几个整数,公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。例如:12、16的公约数有±1、±2、±4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16) = 4。12、15、18的最大公约数是3,记为(12,15,18) = 3。
    几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数。例如:4的倍数有±4、±8、±12、±16,……,6的倍数有±6、±12、±18、±24,……,4和6的公倍数有±12、±24,……,其中最小的是12,一般记为[4,6] = 12。12、15、18的最小公倍数是180。记为[12,15,18] = 180。若干个互质数的最小公倍数为它们的乘积的绝对值。*/
//由概念得:公约数中这几个数可正可负,最大公约数为正  公倍数中这几个数必须为正,结果为正

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

int MaxDiv(int div1, int div2)
{
 //思路:辗转相除法(还有更相减损法), 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。
 //首先,两数必须同为正
 assert(div1); assert(div2);
 int rem = div1%div2;
 while (rem = div1%div2)
 {
  div1 = div2;
  div2 = rem;
 }
 return div2;
}

int MinMul(int mul1, int mul2)
{
 //思路:两数的乘积除以两数的最大公约数
 assert(mul1); assert(mul2);
 return mul1*mul2 / MaxDiv(mul1, mul2);
}

void test()
{
 int a = 0, b = 0;
 scanf("%d", &a);
 scanf("%d", &b);
 printf("MaxDiv = %d\n", MaxDiv(a, b));
 printf("MinMul = %d\n", MinMul(a, b));
}
int main()
{
 test();
 system("pause");
 return 0;
}


两数的最大公约数、最小公倍数

标签:最大公约数   最小公倍数   

原文地址:http://10739786.blog.51cto.com/10729786/1741473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!