博客
关于我
最大公约数gcd和最小公倍数lcm
阅读量:306 次
发布时间:2019-03-01

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

众所周知,求最大公约数一般辗转相除,代码很短,主要在于证明

int gcd(int x,int y){       if(y==0) return x;    else return gcd(y,x%y);}

也可以写为

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

时间复杂度是 O ( l o g ( a + b ) ) O(log(a+b)) O(log(a+b)),比试除法划算多了。

代码很短,主要看证明。

一开始我想的是设 x x x y y y的最大公约数为 a a a

x = m × a x=m \times a x=m×a y = n × a y=n \times a y=n×a,(这里先保证 x > y x>y x>y)
m m m n n n为互质数
所以 x − y = ( m − n ) × a x-y=(m-n) \times a xy=(mn)×a
此时 x − y x-y xy x x x的最大公约数还是 a a a

但是这里就忽略了一个问题:

我不会证明当 m m m n n n为互质数的时候 ( m − n ) (m-n) (mn) m m m n n n中的任意一个数也是互质数!

所以此方法不够严谨。

当这个博客发出去第一次后,我突发奇想可以加上反证法:

已知 m m m n n n为互质数,若 ( m − n ) (m-n) (mn) m m m不为互质数

则有 ( m − n ) = q × t (m-n)=q \times t (mn)=q×t m = p × t m=p \times t m=p×t,( t t t为大于 1 1 1的整数)
那么 n = ( m − ( m − n ) ) = ( p − q ) × t n=(m-(m-n))=(p-q) \times t n=(m(mn))=(pq)×t
这样的话 n n n m m m就不是互质数了
所以假设不成立
这样的话 g c d ( x , y ) gcd(x,y) gcd(x,y)就等于 g c d ( y , x − y ) gcd(y,x-y) gcd(y,xy)
m o d mod mod就相当于是减去了 a a%b a就相当于 a a a减去了 k k k b b b
这样就省去了很多减的运算
辗转相除到最后,其中一个数为 0 0 0
另一个数即为原来两数的最大公因数

由定义“ ∀ x , y ∈ N \forall x,y\in \N x,yN g c d ( a , b ) × l c m ( a , b ) = a × b gcd(a,b) \times lcm(a,b)=a \times b gcd(a,b)×lcm(a,b)=a×b”可得
int lcm(int x,int y){   	return (a*b/gcd(a,b));}

例题:

∙ \bullet
∙ \bullet

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

你可能感兴趣的文章
Netty工作笔记0024---SelectionKey API
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0034---Netty架构设计--线程模型
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0057---Netty群聊系统服务端
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0063---WebSocket长连接开发2
查看>>
Netty工作笔记0070---Protobuf使用案例Codec使用
查看>>
Netty工作笔记0072---Protobuf内容小结
查看>>
Netty工作笔记0077---handler链调用机制实例4
查看>>
Netty工作笔记0081---编解码器和处理器链梳理
查看>>
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>
Netty工作笔记0085---TCP粘包拆包内容梳理
查看>>
Netty常用组件一
查看>>
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>
Netty心跳检测
查看>>
Netty心跳检测机制
查看>>
netty既做服务端又做客户端_网易新闻客户端广告怎么做
查看>>