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;
} 总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
