一、什么是最大公约数什么是最小公倍数
最小公倍数的基本概念:
如果一个数既是a又是b的倍数,那么我们就把这个数叫着a和b的公倍数,如果这个数在a b的所有公倍数里为最小,那这个数就是最小公倍数。
最大公约数的基本概念
能够整除一个整数的整数称为其的约数(如5是10约数);能够被一个整数整除的整数称为其的倍数(如10是5的倍数);如果一个数既是数A的约数,又是数B的约数,称为A,B的公约数,A,B的公约数中最大的一个(可以包括AB自身)称为AB的最大公约数。方法一:
直接遍历寻找最大公约数
方法二:
辗转相除法求最大公约数,辗转相除法的基本做法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数
例如:输入两个数A,B,若A大于B,设二者余数为M则有,
M=A%B;
A=B;
B=M;
如此反复下去当M为0时此时的B就是最大公约数。
二、方法一实现功能
#include<stdio.h>
int main(){
int a,b;
int min,max;
int i=1;
int s,m;
printf("请输入两个正整数,中间用空格隔开:");
scanf("%d %d",&a,&b);
if(a>b) //找出二者之间的最大值
{
max=a;
min=b;
}
else{
max=b;
min=a;
}
for(i=2;i<min;i++)
{
if(a%i==0&&b%i==0) //判断是不是公因子
{
s=i; //这里不能用break结束循环
}
}
i=max;
while(1){ //死循环通过break跳出
if(i%a==0&&i%b==0) //判断是不是公倍数
{
m=i;
break; //找到的第一个公倍数就是最小公倍数,所以直接结束循环
}
i++;
}
printf("%d和%d的最小公倍数为:%d\n%d和%d的最大公约数为:%d\n",a,b,m,a,b,s);
return 0;
}
三,方法二---优化代码(辗转相除法)
小知识:两个数的最小公倍数乘以最大公约数等于这两个数相乘,所以我们求出最大公约数过后可以通过这个等式求出最小公倍数。
#include<stdio.h>
int main(){
int a,b;
int min,max;
int i=1;
int s,m;
printf("请输入两个正整数,中间用空格隔开:");
scanf("%d %d",&a,&b);
if(a>b) //找出二者之间的最大值
{
max=a;
min=b;
}
else{
max=b;
min=a;
}
while(s==0){ //s表示余数,余数为零时结束循环
s=max%min;
max=min;
min=s;
}
m=a*b/min; //求出最小公倍数 ,此时min表示的是最大公约数
printf("%d和%d的最小公倍数为:%d\n%d和%d的最大公约数为:%d\n",a,b,m,a,b,min);
return 0;
}