gcd算法

我们通常利用gcd算法来计算两个数的最大公约数。

gcd求法有很多种,通常我们利用辗转相除法,辗转相除法又称欧几里得算法。其计算原理依赖于下面的定理:

定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。

即:gcd(a,b) = gcd(b,a mod b)

在此有两点需要说明一下:

  1. a>b
  2. b>a mod b

因此我们可以简单的得到如下程序:

int gcd(int a,int b){return b == 0 ? a:gcd(b, a%b);
}

另外,这个程序用到了递归,必然会占用比较大的栈空间,那么会栈溢出吗?

不会栈溢出

可以证明出,让gcd函数递归层数最多的是gcd(Fn, F(n-1)),其中Fn是斐波那契数,因此可以证明gcd(a,b)函数的层数是不超过4.785lgN+1.6723,其中N=max(a,b)。(我也不知道是怎么证明出来的,但是可以想象出gcd函数的递归层数应该随max(a,b)的增大1收敛于一个具体的值而不是发散。)

另外gcd函数还有一些性质,gcd还可以求出两个数的最小公倍数。

紫书上有如上结论;

我们还可以推出这些结论:

  1. gcd(a,b) * lcm(a,b) = a * b
  2. lcm(a,b) = a / gcd(a,b) * b

唯一分解定理

唯一分解定理就是,利用把一个数可以分解为若干个素数相乘的形式的思想去解题。

欧几里得算法和唯一分解定理相关推荐

  1. LightOJ-1220 Mysterious Bacteria (素数打表+欧几里得算法+唯一分解定理)给出x,求x=a^p,最大的指数

    题目大意: x = b^p, x只有一个因子的p次幂构成 如果24 = 2^3*3^1,p应该是gcd(3, 1) = 1,即24 = 24^1 324 = 3^4*2^2=(3^2*2)^2,p应该 ...

  2. 欧几里得算法与唯一分解定理

    整理的算法模板合集: ACM模板 目录 最大公约数与最大公倍数 唯一分解定理 快速分解质因子 最大公约数与最大公倍数 最多O(logn)O(logn)O(logn) int gcd(int a, in ...

  3. FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】

    [唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...

  4. 唯一分解定理(算术基本定理)详解——hdu5248和lightoj1341

    算数分解定理(唯一分解定理): 定义: 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1 P2a2P3a3-Pnan,这里P1<P2<P3-& ...

  5. Gym-101466K Random Numbers(线段树,数学,唯一分解定理)

    给一棵树,树上每个节点有一个权值,有两个操作,RAND操作查询u的子树乘积是多少以及有多少因数,SEED操作把节点u乘上v n,q <= 1e5.数值小于等于1e9,最大的质因数不超过13 组队 ...

  6. LightOJ - 1236 (唯一分解定理)

    题意:求有多少对数对(i,j)满足lcm(i,j) = n,1<=i<=j, 1<=n<=1e14. 分析:根据整数的唯一分解定理,n可以分解为(p1^e1)*(p2^e2)* ...

  7. 牛客 - 阶乘(唯一分解定理)

    题目链接:点击查看 题目大意:给出一个 p ,求出最小的 n! 使得 p 可以整除 n! 题目分析:因为 p 高达 1e9 ,可以考虑sqrt(n)的算法,也就是唯一分解定理了,分解之后对于每个质因子 ...

  8. CodeForces - 222C Reducing Fractions(唯一分解定理)

    题目链接:点击查看 题目大意:给出两个数组,数组a表示的是分子的因数,数组b表示的是分母的因数,求约分后的答案 题目分析:一看题目挺简单的,但是在输出的那里这个题目做了特定的要求,题目首先给出的是1e ...

  9. POJ - 2480 Longge's problem(欧拉函数+唯一分解定理)

    题目链接:点击查看 题目大意:给出一个n,求 题目分析:因为N到了二的三十二次方,所以直接暴力肯定会T,这里介绍两种方法,都可以做实现这个题目 首先我们需要转化一下这个题目,先说一下优化过后的暴力枚举 ...

  10. Aladdin and the Flying Carpet (素数打表+正整数的唯一分解定理,找因数对)

    题目大意:给两个数a,b,求满足c*d==a且c>=b且d>=b的c,d二元组对数,(c,d)和(d,c)属于同一种情况 题目分析:根据唯一分解定理先将a唯一分解,则a的所有正约数的个数为 ...

最新文章

  1. javascript常用代码大全
  2. dart系列之:数学什么的就是小意思,看我dart如何玩转它
  3. HDU1285 确定名次 拓扑排序
  4. CCIE-LAB-第十四篇-PIM Sparst+IGMP
  5. 正则与pandas处理行数据
  6. android 优酷 api接口,腾讯优酷网站视频引用接口
  7. 常用电压电流转换原理图
  8. PHP环境配置遇到的问题与解决
  9. Zabbix5系列-使用温湿度传感器监控机房温湿度 (二十)
  10. Pycharm 添加自动表头(包含汉化和英文版本路径)
  11. 人工智能对数据分析师的影响
  12. 2021-07-16 yarn Total VCores allocated for Containers 与服务器上cpu核数不一致原因
  13. 讲讲如何将图片格式转化成base64格式的
  14. 设计师和程序员必备:全世界最著名的 icon 网站都在这了
  15. Z-blogPHP蜘蛛访问日志统计插件+自动收集死链
  16. realpath和access函数浅谈
  17. C++ array
  18. Get Offer —— 能力素质考核训练
  19. 拼多多加密后token破解与还原
  20. 微信小程序国际化语言包实现方式(di18n-translate)

热门文章

  1. weUI多页面切换效果
  2. ERROR Utils: Uncaught exception in thread stdout writer for python
  3. 桥接模式 适配器模式 装饰模式
  4. 用函数调用的方法输出乘法口诀表
  5. Azure 网站上的 Java
  6. PHPCrawl webcrawler library/framework
  7. 通过CSS3 Media Query实现响应式Web设计
  8. 学习ExtJS(九) fit布局
  9. 终于知道《喜洋洋和灰太狼》为什么火了!
  10. ListCtrl使用