求最小公倍数, 最大公约数的两种常见方法
1. 辗转相除法
又称为欧几里德算法 (具体... 请自查百度)
辗转相除法的核心就是不断的让两个数做除法运算. 其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数.
另 z=x%y;
x=y;
y=z;
终止条件是 y=0
代码如下:
- #include<stdio.h>
- int main()
- {
- int x, y, z, n, m, w;
- printf("请输入两个数:\n");
- scanf_s("%d %d", &x, &y);
- w = x>y ? x : y;
- if (w = y)
- {
- w = x;
- x = y;
- y = w;
- }
- m = x, n = y;
- while (y)
- {
- z = x%y;
- x = y;
- y = z;
- }
- printf("最大公约数为:%d", x);
- printf("\n 最小公倍数为:%d\n", m*n / x);
- system("pause");
- }
2. 穷举法
这个算法的时间复杂度较高, 建议使用上边的第一种方法
- #include<stdio.h>
- int main()
- {
- int x,y,i,j,n,m;
- printf("请输入两个数:\n");
- scanf("%d %d",&x,&y);
- m=x,n=y;
- for(i=1;i<=x;i++)
- {
- if(x%i==0&&y%i==0)
- {
- break;
- }
- }
- for(i=x;i>0;i--)
- {
- if(x%i==0&&y%i==0)
- {
- break;
- }
- }
- printf("最大公倍数:%d\n",i);
- printf("最小公约数:%d\n",m*n/i);
- system("pause");
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2935236.html