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;
} 

总结

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

相关文章

  • opencv4.5.4+VS2022开发环境搭建的实现

    opencv4.5.4+VS2022开发环境搭建的实现

    本文主要介绍了opencv4.5.4+VS2022开发环境搭建的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C语言sizeof与字符串处理与动态内存分配及main函数参数详解

    C语言sizeof与字符串处理与动态内存分配及main函数参数详解

    这篇文章主要介绍了C语言字符串处理函数、sizeof、动态内存分配函数、main函数参数问题,static在修饰变量的时候,如果是修饰全局变量,则跟全局变量功能一样,通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 详解C++内存的代码区,全局区,栈区和堆区

    详解C++内存的代码区,全局区,栈区和堆区

    这篇文章主要为大家介绍了C++内存的代码区,全局区,栈区和堆区,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 利用C语言实现任务调度的示例代码

    利用C语言实现任务调度的示例代码

    这篇文章主要为大家详细介绍了如何利用纯C语言实现任务调度(可用于STM32、C51等单片机),文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-04-04
  • C++哈希表之闭散列方法的模拟实现详解

    C++哈希表之闭散列方法的模拟实现详解

    闭散列指(开放定址法)发生冲突时,如果哈希表没有被填满,则表内一定还有其他空闲位置,可以把冲突值放到下一个没有被占用的空余位置上。本文将模拟实现闭散列方法,需要的可以参考一下
    2022-11-11
  • c++验证哥德巴赫猜想

    c++验证哥德巴赫猜想

    这篇文章主要介绍了c++验证哥德巴赫猜想,哥德巴赫猜想就是任一大于2的偶数,都可表示成两个素数之和,需要的朋友可以参考下
    2014-04-04
  • C语言学生成绩管理系统课程设计

    C语言学生成绩管理系统课程设计

    这篇文章主要为大家详细介绍了C语言学生成绩管理系统课程设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++超细致讲解队列queue的使用

    C++超细致讲解队列queue的使用

    队列先进先出,即只能在容器的末尾添加新元素,只能从头部移除元素,下面这篇文章主要给大家介绍了关于C++中队列queue用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C++动态内存分配(new/new[]和delete/delete[])详解

    C++动态内存分配(new/new[]和delete/delete[])详解

    这篇文章主要介绍了C++动态内存分配(new/new[]和delete/delete[])详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++实现LeetCode(59.螺旋矩阵之二)

    C++实现LeetCode(59.螺旋矩阵之二)

    这篇文章主要介绍了C++实现LeetCode(59.螺旋矩阵之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论