作为一个数学很渣的人,我表示学习算法真是有点困难,虽然万事开头难,我还是迈出了第一步,以后我尽量保证一天跟新一个算法,当然,复杂的我会分成好几篇来写,尽量保持一天一更新的速率。
说起其最大公约数,这个并不是什么高难度的事情。首先我跟大家说一下我的想法:
最大公约数肯定小于两个被求数,所以我们直接之求出两个数所有的数,最后比较大小就可以了。代码如下:
int max = 0;
for (int i = 1; i <= num1; i++) {
if (num1 % i == 0 && num2 % i == 0) {
max = i;
}
}
return max;
这个算法,知道辗转相除法之后,应该就只剩下我用了。
下面介绍一下原理:
若 a,b 且 a = bh + r,其中 h,r,则 gcd(a,b) = gcd(b,r). --《百度百科》
至于证明大家可以常看网上的,这里我就不再粘贴了。
大家看一下我的实现,虽然没有网上大牛的6,但是我个人还是觉得可以的。
int gcd(int num1, int num2)
{
if (num1 % num2 == 0) {
return num2;
}
int r = num1 % num2;
return gcd(num2, r);
}
好了,开开心心完成今天的更新,安心去吃饭了。