gcd函数简介
最大公因数(英语:highest common factor,hcf)也称最大公约数(英语:greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大正整数。而多个整数不能都为零。例如8和12的最大公因数为4。
求两个整数最大公约数主要的方法:
1.穷举法:分别列出两整数的所有约数,并找出最大的公约数。
2.素因数分解:分别列出两数的素因数分解式,并计算共同项的乘积。
3.短除法:两数除以其共同素因数,直到两数互素时,所有除数的乘积即为最大公约数。
4.辗转相除法:两数相除,取余数重复进行相除,直到余数为0时,前一个除数即为最大公约数。
相关介绍: https://blog.csdn.net/Ljnoit/article/details/104730787
gcd函数写法
C++写gcd函数有几种写法,下面介绍几种。
这些代码我都对拍过,请大家放心使用。
- while循环
此段代码a、b可以为0
inline int gcd(int a,int b) {int r;while(b>0) {r=a%b;a=b;b=r;}return a;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 三目运算符
此段代码a、b可以为0
inline int gcd(int a,int b) {return b>0 ? gcd(b,a%b):a;
}
- 1
- 2
- 3
- 位运算
此段代码a、b不能为0
inline int gcd(int a,int b) {while(b^=a^=b^=a%=b);return a;
}
- 1
- 2
- 3
- 4
(b^=a^=b^=a%=b)
相当于(b^=(a^=(b^=(a%=b))))
相当于a%=b,b^=a,a^=b,b^=a
其中b^=a,a^=b,b^=a
相当于swap(a,b)
,详见卡常技巧第3条。
所以(b^=a^=b^=a%=b)
等价于a%=b,swap(a,b)
,这就是gcd函数的一般写法。
- if+while
此段代码a、b可以为0
inline int gcd(int a,int b) {if(b) while((a%=b) && (b%=a));return a+b;
}
- 1
- 2
- 3
- 4
- 辗转相除法
此段代码a、b不能为0
inline int gcd(int a,int b) {if(a%b==0) return b;else return (gcd(b,a%b));
}
- 1
- 2
- 3
- 4
- gcd库函数
此段代码a、b可以为0
#include <algorithm>
inline int gcd(int a,int b) {return __gcd(a,b);
}
- 1
- 2
- 3
- 4
相关文章
解决编译.spec:rpm build with: fg: no job control报错
报错:rpm build with "fg: no job control"解决:
# emacs rpm/test.spec
%build
%make_build替换为:
%build
make %{?_smp_mflags}
bg和fg指令(整理)以及 Linux中Ctrl+C、Ctrl+D等按键操作进程相关命令
fg(前台执行) frontground bg(后台执行) background
linux提供的fg和bg命令,可以让我们轻松调度正在运行的任务
假如你发现运行的一个程序需要很长的时间,但是需要干别的事情,你就可以用ctrl-z挂起这个程序,然后可以看到系统的提…
Unix或Linux中、jobs、fg、bg等命令的使用方法
fg、bg、jobs、&、ctrl z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行 二.ctrl z 可以将一个正在前台执行的命令放到后…
前后台切换命令(ctrl+z jobs bg fg )
当我在终端里面运行某个命令的时候,结果不是很快就能出来的那种,或者是一大堆字在屏幕上狂翻。这个时候,有时ctrlc也不起作用,那我会用ctrlz退出来,这个很有效,但是说实话我不知道为什么这个可以退出&#…
tkinter实现屏幕窗口弹幕
tkinter实现屏幕窗口弹幕 构思创建类制定 init 函数 移动退出启动多线程无背景 完整代码TinReader可移动工具栏写在最后 构思
我在CSDN上看了一篇文章,叫做 “tkinter制作弹幕”。但这并不是真正意义上的弹幕,而仅仅是弹窗,同时如此多的窗口…
Linux进程管理命令:nohup、、jobs、fg、bg、ps、kill
对Linux进程的管理是我们经常遇到的,如何查看一个进程的状态?如何把一个后台的进程调至进程执行?如何杀死一个进程…看了本文后,你将会全部掌握!
1. nohup
nohup的用法:
用途:不挂断地运行命…
bg、fg、、vim 中:! 的使用-终端中简单的任务调度
背景 1、在终端里用 vim 编辑多个文件,修改了某个文件后,想调试一下;如果把 vim 关闭掉,调试完之后发现代码还是没通过,又得重新打开 2、同一个终端中频繁切换不同的应用,每次都要重新关闭上一个打开一个新…
Systemd方式Docker代理服务器设定
越来越多的LInux发行版开始使用Systemd管理服务,下面来看一下如何用Systemd的方式设定Docker的代理服务器。
为什么要设定?
在公司内网如果不设定代理服务器,Docker无法进行docker search和docker pull等与网络相关的操作。在docker pull的…