JS求最大公约数

JavaScript074

JS求最大公约数,第1张

Vue2.x项目上有这样的要求,上传指定比例的图片,然后给一个提示给用户,比如图片是375x250,最终比例就是5:3,因为375*250会在很多页面用到,就通过混入复用了,但是,提示还是直接黏贴原型图里的。

虽然后续改了大小,尝到了封装的甜头,可比例却不是自动更新的...

首先想到的就是穷举了

明显计算了很多次

看似正确,其实有个致命的问题

出现一个公约数后,要重置循环标记和最小值

也可以从大往小循环

辗转相除法又名广义欧几里得除法,是用来求解两个数的最大公约数的最佳算法之一。

算法原理:若a除以b的余数为r , 则有 (a , b) = ( b ,r ) ((a,b)表示a和b的最大公约数)

var temp=v是把v的值赋予temp的意思js里面赋值使用的是"=",判断相等用的是"=="。

var temp=v和var temp=0在这里是没有任何影响的,因为无论temp的初始值是多少,在第一次循环的时候,都会变成40%15的值,也就是10,之所以这样写,可能是作者的一个习惯而已。

temp=u%v%是取模运算,也就是俗称的取余数,这里就是将u除以v的余数赋值给了temp。而temp最后又赋值给了v

循环进行的条件就是v>0;那么当v=0也就是余数为0的时候,就终止循环。

这个算法的原理是数学上的辗转相除法,百度百科上有很详细的介绍,在这里我就不再献丑了