最大公约数:
1.辗转相除法
2.辗转相减法(更相减损法)
3.穷举法
最小公倍数:两数的乘积除以最大公约数
方法:
1.判断大小,并使大数赋给a,小数赋给b;
2.辗转相除法:在两数相除余数不为0的情况下循环相除,直至余数为0并得出最大公约数
3.辗转相减法(更相减损法):两数之差不与两数任一个相等时,循环进行,递归,直至有一个数与余数相等即为最大公约数;
4.穷举法:for循环i从最小数依次减小,直至被两数同时相除余数为0,即为最大公约数;
源代码:
#include<iostream>
using namespace std;
void ygq(int *a,int *b)/*判断大小*/
{
int c;
if(*a<*b)
{
c=*a;
*a=*b;
*b=c;
}
}
int ygq1(int a,int b)/*辗转相除法*/
{
int c=1;
ygq(&a,&b);
while(c!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int ygq2(int a,int b)/*辗转相减法*//*更相减损法*/
{
ygq(&a,&b);
while(a!=b)
{
a=a-b;
ygq(&a,&b);
}
return a;
}
int ygq3(int a,int b)/*穷举法*/
{
ygq(&a,&b);
for(int i=b;i>=1;i--)
{
if(a%i==0&&b%i==0){
return i;
break;
}
}
return 1;
}
int main()
{
int a,b;
printf("请输入两个整数:");
cin>>a>>b;
if(a>0&&b>0)
printf("辗转相除法\n最大公约数:%d\n最小公倍数:%d\n",ygq1(a,b),a*b/ygq1(a,b));
else
printf("Error!");
if(a>0&&b>0)
printf("更相减损法\n最大公约数:%d\n最小公倍数:%d\n",ygq2(a,b),a*b/ygq2(a,b));
else
printf("Error!");
if(a>0&&b>0)
printf("穷举法\n最大公约数:%d\n最小公倍数:%d\n",ygq3(a,b),a*b/ygq3(a,b));
else
printf("Error!");
return 0;
}
备注:
有问题可以评论,看到后我会尽力及时回复的,谢谢!