求两个正整数的最大公约数和最小公倍数

    xiaoxiao2024-12-09  144

    最大公约数

    1.两个正整数的最大公约数是能同时整除这两个数的最大的正整数。

    (1).而当两个数相等的时候,最大公约数就等于它本身,所以一种方法就是采用递归,当两个数a和b不相等的时候,再求a-b的绝对值和较小的数的最大公约数。 代码如下:

    //函数功能: 计算两个正整数的最大公约数 int MaxCommonFactor(int a, int b) { if(a==b) //当a==b,返回a或b的值均可。 { return a; } else if(a>b) MaxCommonFactor(a-b,b); else MaxCommonFactor(a,b-a); }

    当然也可以不采用递归的方法,代码如下:

    int MaxCommonFactor(int a, int b) { while(a-b)//利用相减法求最大公约数 { if(a>b) a=a-b; else b=b-a; } return a; }

    (2)可是当数比较大的时候,消耗的时间就比较长了,故采用更快速的方法——辗转相除法。设a对b求余为m, 若m不等于0,则 a = b, b = m, 继续求余,否则 b 为最大公约数。

    int MaxCommonFactor(int a, int b) { if(a<b) //将两数中较大的数给a { int temp = b; b = a; a = temp; } while(a%b) { int temp =a%b; a = b; b = temp; } return b; }

    最小公倍数

    2.两个正整数的最大公倍数是能同时把这两个数除尽的最小的正整数,最小公倍数可用这两个数的乘积除以最大公约数得到。

    int MinCommonMultiple(int a, int b) { int x = MaxCommonFactor(a,b); return (a*b)/x; }

    数据测试

    主函数代码:

    #include <stdio.h> #include <stdlib.h> int MinCommonMultiple(int a, int b); int MaxCommonFactor(int a, int b); int main(void) { int a, b, x,y; printf("Input two positive integers,a,b:\n"); scanf("%d,%d", &a, &b); if(a<=0||b<=0) { printf("Input error!\n"); } else { int MaxCommonFactors = MaxCommonFactor(a,b); int MinCommonMultiples = (a*b)/MaxCommonFactor(a,b); printf("MinCommonMultiple = %d\n",MinCommonMultiples); printf("MaxCommonFactor = %d\n",MaxCommonFactors); } return 0; }

    最新回复(0)