最大公约数及最小公倍数

一、主要思想:
辗转相除法:小数赋值于大数,大数除以小数取余赋值于小数,直到小数为0,输出大数值便为最大公约数;两数的乘积除以最大公约数的值为最小公倍数。
穷举法:用两个数分别去逐个除以1到大数之间的数字,直到余数为零,就可得到最大公约数;用大数到两数之积的数逐个除以两数直到余数为零,就可得到最小公倍数。
递归法:两数相除取余,然后余数与除数继续相除取余,直到余数为零,返回除数为最大公约数。(余数一直与除数进行相除取余,一直要递推,然后回归)
多个数求最大公约与最小公倍数:利用数组存放数据,两两进行公约数与公倍数的求取。
二、代码

`void f1()//辗转相除法
{ 
int a,b,c,z,t,x,y;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
a=x;
b=y;
if(xwhile(y){
z=x%y;
x=y;
y=z;
}
c=a*b/x;
printf("最大公约数是:%d\n最小公倍数是:%d\n",x,c);
}

void f2()//穷举法
{
 int a,b,gy,gb;
 printf("请输入两个整数:");
 scanf("%d%d",&a,&b);
 gy=fun_y(a,b);
 gb=fun_b(a,b);
 printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int fun_y(int x,int y)
{
 int i;

 for(i=x0;i--)
 {
  if(x%i==0&&y%i==0)
   break;
 }
 return i;
}
int fun_b(int x,int y)
{
 int z,i; 
 z=x*y;
 for(i=x>y?x:y;i<=z;i++)
 {
  if(i%x==0&&i%y==0)
   break;
 }
 return i;
}

void f3(void)//递归法
{
int a,x,y;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
int gy=gys(x,y);
int gb=x*y/gy; 
printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int gys(int a,int b)
{
int r;
r=a%b;
if(r==0) return b;
else 
return gys(b,r);
}

void g_many()//穷举法求多个数的最大公约数 
{
int i=0,p,j,m;
printf("有多少个数字:\n");
scanf("%d",&j);
int a[100];
printf("请输入您所求数字:\n");
for(i=0;iscanf("%d",&a[i]);
}
for(i=0;i1;i++){
p=fun_y(a[i],a[i+1]);
a[i+1]=p;
}
for(i=0;i1;i++){
m=fun_b(a[i],a[i+1]);
a[i+1]=m;
}
printf("这几个数的最大公约数:%d\n最小公倍数:%d\n",p,m);
} 
`
void f1()//辗转相除法
{ 
int a,b,c,z,t,x,y;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
a=x;
b=y;
if(xwhile(y){
z=x%y;
x=y;
y=z;
}
c=a*b/x;
printf("最大公约数是:%d\n最小公倍数是:%d\n",x,c);
}

void f2()//穷举法
{
 int a,b,gy,gb;
 printf("请输入两个整数:");
 scanf("%d%d",&a,&b);
 gy=fun_y(a,b);
 gb=fun_b(a,b);
 printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int fun_y(int x,int y)
{
 int i;

 for(i=x0;i--)
 {
  if(x%i==0&&y%i==0)
   break;
 }
 return i;
}
int fun_b(int x,int y)
{
 int z,i; 
 z=x*y;
 for(i=x>y?x:y;i<=z;i++)
 {
  if(i%x==0&&i%y==0)
   break;
 }
 return i;
}

void f3(void)//递归法
{
int a,x,y;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
int gy=gys(x,y);
int gb=x*y/gy; 
printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int gys(int a,int b)
{
int r;
r=a%b;
if(r==0) return b;
else 
return gys(b,r);
}

void g_many()//穷举法求多个数的最大公约数 
{
int i=0,p,j,m;
printf("有多少个数字:\n");
scanf("%d",&j);
int a[100];
printf("请输入您所求数字:\n");
for(i=0;iscanf("%d",&a[i]);
}
for(i=0;i1;i++){
p=fun_y(a[i],a[i+1]);
a[i+1]=p;
}
for(i=0;i<=1;i++){
m=fun_b(a[i],a[i+1]);
a[i+1]=m;
}
printf("这几个数的最大公约数:%d\n最小公倍数:%d\n",p,m);
} 

三、结果
最大公约数及最小公倍数_第1张图片
最大公约数及最小公倍数_第2张图片

你可能感兴趣的:(最大公约数及最小公倍数)