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