C语言算法 求最大公约数(辗转相除法)
作者:互联网
辗转相除法(欧几里德算法)
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
#include<stdio.h>
int fun(int a,int b){
int r,t;
if(a<b){//当中a的值小于b的时候,将a的值与b进行交换
t=a;
a=b;
a=t;
}
r = a%b;//当a的值大于b的时候直接求其对应的余数 当余数等于0的时候,直接可以除尽的时候其最大公约数就是b
//当余数不等于0的时候 ,一次没有除尽
while(r!=0){
a=b;//也就是说明b没有被除尽,将b的值赋予a
b=r;//然后将余数赋予b 当除不尽的时候其最大公约数为r
r=a%b;//当r等于0的时候 结束循环 b被除尽.
}
return b;//最大公约
}
void main(){
int num1,num2,a;
printf("输入 num1 和 num2的值");
scanf("%d %d",&num1,&num2);
printf("num1 = %d num2 = %d \n \n",num1,num2);
a=fun(num1,num2);
printf("最大公约数为 %d\n\n",a);
}
标签:152,C语言,1997,int,615,最大公约数,除法 来源: https://blog.csdn.net/qq_44757034/article/details/105887004