最大公约数与最小公倍数模板
1、求两个数最大公约数
方法一:辗转相除法
思路:两个数,用较大的数除以较小的数,所得余数与较小的数记为新的两个数,再重复之前的过程,直到余数为0,这时较大的数就是最大公约数。
完整程序
#include<stdio.h>
int main()
{
int m,n,r;
scanf("%d,%d",&m,&n);
do
{
r=m%n;
m=n;
n=r;
}
while(n);
printf("greatest common divisor is %d\n",m);
return 0;
}
封装函数
int gcd(int m,int n)
{
do
{
r=m%n;
m=n;
n=r;
}
while(n);
return m;
}
调用函数
#include<stdio.h>
int main()
{
int m,n,r;
int gcd(int m,int n);
scanf("%d,%d",&m,&n);
gcd(int m,int n);
printf("greatest common divisor is %d\n",m);
return 0;
}
递归函数调用
#include<stdio.h>
int main()
{
int m,n;
scanf("%d,%d",&m,&n);
int gcd(int x,int y);
printf("greatest common divisor is %d\n",gcd(m,n));
}
int gcd(int x,int y)
{
if(y==0) return x;
else return(gcd(y,x%y));
}
方法二:更相减损法
思路:两个数,用较大的数减去较小的数,所得差与较小的数记为新的两个数,再重复之前
的过程,直到两个数相等,这时这两个数就是最大公约数。
完整程序
#include<stdio.h>
int main()
{
int m,n;
scanf("%d,%d",&m,&n);
while(m!=n)
{
if(m>n) m-=n;
else n-=m;
}
printf("greatest common divisor is %d\n",m);
return 0;
}
封装函数
int gcd(int m,int n)
{
while(m!=n)
{
if(m>n) m-=n;
else n-=m;
}
return m;
}
调用函数
#include<stdio.h>
int main()
{
int m,n,r;
int gcd(int m,int n);
scanf("%d,%d",&m,&n);
printf("greatest common divisor is %d\n",gcd(m,n));
return 0;
}
2、求两个数最小公倍数
思路:两个数,从较大的数开始,依次找能同时整除这两个数的整数,这个整数就是这两个
数的最小公倍数。
完整程序
#include<stdio.h>
int main()
{
int m,n,i;
scanf("%d,%d",&m,&n);
for(i=(m>n?m:n);;i++)
if(i%m==0 && i%n==0)
{
printf("lease common multiple is %d",i);
break;
}
return 0;
}
封装函数
int lcm(int m,int n)
{
int i;
for(i=(m>n?m:n);;i++)
if(i%m==0 && i%n==0)
return i;
}
调用函数
#include<stdio.h>
int main()
{
int m,n,i;
int lcm(int m,int n);
scanf("%d,%d",&m,&n);
printf("lease common multiple is %d",lcm(m,n));
return 0;
}

浙公网安备 33010602011771号