学c的时候,遇到这个案例,做了点总结。如有错,欢迎指正。
辗转相除法
int main(){
int x,y;
int m,n;
int z;
printf("请输入两个数字:");
scanf("%d %d",&x,&y);
m=x;
n=y;
if(x<y){
int a;
a=x;
x=y;
y=a;
}
while(y!=0){
z=x%y;
x=y;
y=z;
}
printf("%d和%d的最大公约数为:%d\n",m,n,x);
printf("%d和%d的的最小公倍数为:%d\n",m,n,(m*n)/x);
return 0;
}
辗转相减法
int main(){
int x,y;
int m,n;
int z;
printf("请输入两个数:");
scanf("%d %d",&x,&y);
m=x;
n=y;
while(x!=y){
if(x>y){
x=x-y;
}else{
y=y-x;
}
}
printf("%d和%d的最大公约数为:%d\n",m,n,x);
printf("%d 和%d的最小公倍数为:%d\n",m,n,(m*n)/x);
return 0;
}
枚举法
int main(){
int x,y;
int m,n;
int z;
printf("请输入两个数:");
scanf("%d %d",&x,&y);
m=x;
n=y;
int i;
for(i=1;i<=x;i++){
if(x%i==0&&y%i==0){
break;
}
}
for(i=x;i>0;i--){
if(x%i==0&&y%i==0){
break;
}
}
printf("%d和%d的最大公约数为:%d\n",m,n,i);
printf("%d 和%d的最小公倍数为:%d\n",m,n,(m*n)/i);
return 0;
}