在C语言中如何求两个数的最大公约数呢?下面用三种方法进行求解。
方法一:穷举法。
先比较两个数的大小,然后找出较小数t,最后判断t为何值时两个数都能整除,此方法效率较低。
代码如下:
#include<stdio.h> int main() { int num1,num2,temp,i; scanf("%d%d",&num1,&num2); if(num1>num2) { temp=num1; num1=num2; num2=temp; }/*将较小值赋给num1*/ for(i=num1;i>0;i--) { if(num1%i==0&&num2%i==0)/*两个数都被i整除时即为最大公约数*/ printf("%d ",i); } return 0; }
方法二:辗转相减法。
辗转相减法是用较大数减去较小数,再比较减数和差的大小,用较大数减去较小数,如此不断循环,直到两数相减为0停止,则最大公约数就求出来了。
代码如下:
#include<stdio.h> int main() { int a,b; scanf("%d%d",&a,&b); while(a!=b) { if(a>b)a=a-b;/*比较两数大小,大数减小数差并赋给a*/ else b=b-a; } printf("%d",b); return 0; }
方法三:辗转相除法。
辗转相除法求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数。)
代码如下:
#include<stdio.h> int main() { int num1,num2,temp; scanf("%d%d",&num1,&num2); /*不需要判断两个数的大小,当num1<num2时,在经过一次运算后,两个数自动进行交换。*/ while(num2) { temp=num1%num2;/*辗转相除求最大公约数*/ num1=num2; num2=temp; } printf("%d",num1); return 0; }
最小公倍数求法:要求的两个数相乘除以最大公约数就是两个数的最小公倍数。
时间: 2024-10-13 09:16:30