(1)辗转相除法
#include<stdio.h>
void main() /* 辗转相除法求最大公约数 */
{
int m,n,a,b,c;
printf("输入两个数字:\n");
scanf("%d,%d",&a,&b);
m=a;
n=b;
while(b!=0) /* 余数不为0,继续相除,直到余数为0 */
{
c=a%b;
a=b;
b=c;
}
printf("最大公约数是:%d\n",a);
printf("最小公倍数是:%d\n",m*n/a);
}
程序原理:
1. a%b得余数c
2. 若c=0,则b即为两数的最大公约数
3. 若c≠0,则a=b,b=c,再回去执行1
(2)相减法
#include<stdio.h>
void main() /* 相减法求最大公约数 */
{
int m,n,a,b;
printf("输入两个数字:\n");
scanf("%d,%d",&a,&b);
m=a;
n=b;
while (a!=b) /* a, b不相等,大数减小数,直到相等为止。*/
if(a>b)
a=a-b;
else
b=b-a;
printf("最大公约数是:%d\n", a);
printf("最小公倍数是:%d\n", m*n/a);
}
程序原理:
1. 若a>b,则a=a-b
2. 若a<b,则b=b-a
3. a=b,则a(或b)即为两数的最大公约数
4. 若a≠b,则再回去执行1
(3)穷举法
#include<stdio.h>
void main() /* 穷举法求最大公约数 */
{
int m,n,a,b,i,t;
printf("请输入两个数字:\n");
scanf("%d,%d",&a,&b);
m=a;
n=b;
for (i=1;i<=a;i++)
if (a%i==0&&b%i ==0 )
t=i;
printf("最大公约数是:%d\n",t);
printf("最小公倍数是:%d\n",m*n/t);
}
程序原理:
有两整数a和b:
1.i=1
3.i++
4. 若 i<= a(或b),则再回去执行②
5.若 i > a(或b),则t即为最大公约数,结束