C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言实现辗转相除法

C语言之实现辗转相除法的两种方式

作者:你的代码没bug

这篇文章主要介绍了C语言之实现辗转相除法的两种方式,具有很好的参考价值,希望对大家有所帮助,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C语言实现辗转相除法

辗转相除法

又名“欧几里德算法”

图片来自搜狗搜索。

第一种方式

根据定义就可以写出一种比较简单的实现方法:、

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
	int a,b,c;
	scanf("%d %d",&a,&b);
	c=a%b;
	while(c!=0)
	{
		a=b;
		b=c;
		c=a%b;	
	}
	printf("%d",b);//将除数输出 
	return 0;
}

第二种方式

熟练掌握辗转相除法之后,可以用递归的形式来实现:

#include <stdio.h>
#include <stdlib.h>
//递归函数
int gcd(int a,int b){
	if(b==0) return a;//返回a,即返回上一步的b 
	return gcd(b,a%b);
}
int main(int argc, char *argv[]) {
	int a,b;
	scanf("%d %d",&a,&b);
	printf("%d",gcd(a,b));
	return 0;
}

C语言求最大公约数(辗转相除法)

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。

计算公式为gcd(a,b) = gcd(b,a mod b)= gcd(a mod b,b mod (a mod b))→直到gcd(m,0)。

b处的值放入a,b处的值变为原a的值对原b的值

比如:a=12,b=8,gcd(12,8)=gcd(8,4)=gcd(4,0),所以m=4,即最大公约数为4。

#include<stdio.h>
int main()
{
	int a=0,b=0;//求a,b的最大公约数
	scanf("%d %d",&a,&b);
	int m=0;//用于存放最大公约数 
	int t=0;//设置一个存放器,用于存放a值 
	while(b!=0)//直到b变量为0,a变量就是所求的最大公约数 
	{
		t=b; 
		b=a%b;//b为a对b取余数 
		a=t;//把原来b的值放入a变量中 
	}
	printf("%d",a); 
	return 0;
} 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文