对于m,n两数求最大公约数的算法:
(1)辗转相除法
1.c=m%n。
2.若c=0,则n就是两数的最大公约数。
3.若c!=0,则m=n,n=c然后重新执行1。
代码实现过程如下:
#include<stdio.h>
int sove(int x,int y)
{
return x%y==0?y:sove(y,x%y);
}
int main()
{
int m,n,c;
scanf("%d %d",&m,&n);
int w=sove(m,n);
printf("%d\n",w);
return 0;
}
(2)相减法
1.若m>n,则m=m-n。
2.若m<n,则n=n-m。
3.若m=n,则m或n就是最大公因数。
4.若在m!=n的情况下回去执行1。
代码实现过程如下:
#include<stdio.h>
int sove(int x,int y)
{
int answer;
while(x!=y)
{
if(x>y)
x=x-y;
else
y=y-x;
}
answer=x;
return answer;
}
int main()
{
int m,n,c;
scanf("%d %d",&m,&n);
int w=sove(m,n);
printf("%d\n",w);
return 0;
}
(3)穷举法
1.找出m,n中较小的数。
2.i从m,n中较小的一个数开始到1进行循环如果m,n两数均能整除i则i即为最大公因数。
代码实现过程如下:
#include<stdio.h>
int sove(int x,int y)
{
int answer;
if(x>y)
{
int t=x;
x=y;
y=t;
}
for(int i=x;i>=1;i--)
{
if(x%i==0&&y%i==0)
{
answer=i;
break;
}
}
return answer;
}
int main()
{
int m,n,c;
scanf("%d %d",&m,&n);
int w=sove(m,n);
printf("%d\n",w);
return 0;
}
对于m,n两数求最小公倍数的算法
最小公倍数=m*n/最大公因数