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);
} 
原创文章 75 获赞 149 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/105887004