博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧几里德算法及拓展
阅读量:1870 次
发布时间:2019-04-26

本文共 634 字,大约阅读时间需要 2 分钟。

1、欧几里德算法(辗转相除)求两个数的最大公约数

例如:求a, b的最大公约数即gcd(a, b) 当b != 0时, b = a%b, a = b,继续gcd(a, b) 当b == 0时,此时的a就是a,b的最大公约数
代码递归实现:
int gcd(int a, int b) {  return b ? gcd(b, a%b) : a;}
代码循环实现:
int gcd(int a, int b) {  int temp;  while (b) {    temp = a;        a = b;    b = temp%b;  }  return a;}

2、欧几里德的拓展

我们知道,在数学中,对于任意两个正整数a和b,必定存在一对整数s、t使得sa+tb = gcd(a,b)void exgcd(int a, int b, int * s, int * t) {  if (b == 0) {    *s = 1, *t = 0;  }else {    int next_s, next_t;    exgcd(b, a%b, &next_s, &next_t);    *s = next_t, *t = next_s - a/b * next_t;  }}
当b == 0时可取s = 1, t = 0; 当b != 0时s = next_t, s = next_s - a/b * next_t(即s,t与下一层的s, t存在的关系);
 

转载地址:http://oweff.baihongyu.com/

你可能感兴趣的文章
买卖股票的最佳时机
查看>>
AUC粗浅理解笔记记录
查看>>
torch 模型运行时间与forward没对应的可能原因
查看>>
JavaScript 的addEventListener() 事件监听详解!
查看>>
上传图片到阿里云OSS和获取上传图片的url的详解 !
查看>>
Kafka为什么这么快?
查看>>
Java 生产者和消费者面试题
查看>>
生产者消费者问题
查看>>
本机电脑连接虚拟机redis失败解决方法
查看>>
DM365 应用层gpio控制
查看>>
linux i2c子系统abc
查看>>
CSS3 帧动画(Sprite,直译叫雪碧图)
查看>>
Java 父线程与子线程相互通信的方法
查看>>
Redis 六种淘汰策略和三种删除策略
查看>>
Java LinkedHashMap
查看>>
JPA 多线程同时对一条数据进行Update的问题
查看>>
JPA 多线程对数据进行更新,Update和Insert同时存在的问题
查看>>
Java 高性能队列Disruptor
查看>>
SpringBoot 使用https
查看>>
Java 读写锁
查看>>