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

 更新时间:2023年08月10日 09:45:03   作者:你的代码没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;
} 

总结

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

相关文章

  • Qt使用QListWidget实现自定义Item

    Qt使用QListWidget实现自定义Item

    这篇文章主要为大家详细介绍了Qt如何使用QListWidget实现自定义Item的效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • Matlab绘制酷炫坐标区域的方法详解

    Matlab绘制酷炫坐标区域的方法详解

    这篇文章主要为大家详细介绍了如何利用Matlab编写一个能让坐标区域变得很炫酷的修饰函数,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-05-05
  • C++ qt 使用jsoncpp json 读写操作

    C++ qt 使用jsoncpp json 读写操作

    JsonCpp是一个基于C++语言的开源库,用于C++程序的Json数据的读写操作,本文重点给大家介绍C++ qt 使用jsoncpp json 读写操作,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • c++引用传参和指针传参的区别及说明

    c++引用传参和指针传参的区别及说明

    这篇文章主要介绍了c++引用传参和指针传参的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 用C/C++实现linux下检测网络接口状态

    用C/C++实现linux下检测网络接口状态

    这篇文章主要为大家详细介绍了用c/c++实现linux下检测网络接口状态,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • C语言统计一篇英文短文中单词的个数实例代码

    C语言统计一篇英文短文中单词的个数实例代码

    本文通过实例代码给大家介绍的C语言统计一篇英文短文中单词的个数,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-03-03
  • 如何通过函数指针调用函数(实现代码)

    如何通过函数指针调用函数(实现代码)

    指针可以不但可以指向一个整形,浮点型,字符型,字符串型的变量,也可以指向相应的数组,而且还可以指向一个函数
    2013-09-09
  • C++中初始化二维数组的几种常见方法

    C++中初始化二维数组的几种常见方法

    本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vector作为动态二维数组的灵活性和应用场景,需要的朋友可以参考下
    2025-04-04
  • QT+ffmpeg实现视频解析的示例详解

    QT+ffmpeg实现视频解析的示例详解

    这篇文章主要为大家详细介绍了如何利用QT+ffmpeg实现视频解析功能,文中的示例代码讲解详细,对我们学习Qt有一定帮助,需要的可以参考一下
    2022-09-09
  • C++详解如何实现动态数组

    C++详解如何实现动态数组

    这篇文章主要为大家详细介绍了C++实现动态数组的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论