最大公约数: 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; }备注: 有问题可以评论,看到后我会尽力及时回复的,谢谢!