求最小公倍數,最大公約數的兩種常見方法
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;
}