国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

JavaScript求一組數(shù)的最小公倍數(shù)和最大公約數(shù)常用算法詳解【面向

2024-05-06 15:34:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了JavaScript求一組數(shù)的最小公倍數(shù)和最大公約數(shù)常用算法。分享給大家供大家參考,具體如下:

方法來(lái)自求多個(gè)數(shù)最小公倍數(shù)的一種變換算法(詳見(jiàn)附錄說(shuō)明)

最小公倍數(shù)的算法由最大公約數(shù)轉(zhuǎn)化而來(lái)。最大公約數(shù)可通過(guò)如下步驟求得:

(1) 找到a1,a2,..,an中的最小非零項(xiàng)aj,若有多個(gè)最小非零項(xiàng)則任取一個(gè)
(2) aj以外的所有其他非0項(xiàng)ak用ak mod aj代替;若沒(méi)有除aj以外的其他非0項(xiàng),則轉(zhuǎn)到(4)
(3) 轉(zhuǎn)到(1)
(4) a1,a2,..,an的最大公約數(shù)為aj

寫(xiě)了兩個(gè)版本的javascript求公倍數(shù)和公約數(shù),主要偏重于算法,沒(méi)有太注意命名,很多就直接寫(xiě)的單字母名稱。

0. 簡(jiǎn)單易懂的循環(huán)

function getMin(arr){  var min = Infinity  arr.forEach(function(item){    if( item < min && item !=0 ){      min = item    }  })  return min}function howMuchZero(arr){  var zerocount = 0  arr.forEach( function(item){    item === 0 ?    zerocount++ : zerocount  }    )  if(zerocount === arr.length -1) {    return true  }  else return false}function maxDivi(arr){  do {  var min = getMin(arr)  arr = arr.map((item)=> item===min? item:item%min    )  }  while (!howMuchZero(arr))  return getMin(arr)}function minMulti(arr){  var totalMulti = arr.reduce((pre,item)=>    pre = pre * item    )  var brr = arr.map((item)=>    totalMulti/item    )  var brr_maxDivi = maxDivi(brr)  return totalMulti/brr_maxDivi}

1. function套function

var arr_minMulti, arr_maxdivifunction minMulti(arr){  var totalmulti =    arr.reduce((multi,curvalue) => multi * curvalue)  if (totalmulti === 0) {    arr_minMulti = 0    return  }  var marr = arr.map((item) => totalmulti/item)  maxDivisor(marr)   arr_minMulti = totalmulti / arr_maxdivi}function maxDivisor(arr){  var min = getMin(arr)  if(min === Infinity) {    arr_maxdivi = min    return  }  var exparr = arr.filter(function(item){      return (item !== min && item !== 0)  })  if(exparr.length === 0){    arr_maxdivi = min    return;  }  else{    var modearr = arr.map(function(item){      return (item === min||item===0)? item:item%min    })    console.log(modearr,'modearr')    maxDivisor(modearr)  }}function getMin(arr){  var min = Infinity  arr.forEach(function(item){    if (item && item < min) {      min = item    }  })  return min}arr =[13,20,10,26]minMulti(arr)console.log('最小公倍數(shù)',arr_minMulti)

2. object oriented 面向?qū)ο?/p>

function maxDivisor(arr,origin){  this.arr = arr  this.min = this._getMin(arr)  this.maxDivisor = this._getMaxDiv()  if(origin){    this.minMulti = this._getMinMulti()  }}maxDivisor.prototype._getMin = function(arr) {  var min = Infinity  arr.forEach(item => min = (item && item < min)? item : min)  return min}maxDivisor.prototype._getMaxDiv = function() {  var arr_maxdivi  var self = this,    arr = this.arr  function maxDivisor(arr){    //console.log(self._getMin)    var min = self._getMin.call(null,arr)     console.log(min,'min')    if(min === Infinity) {      arr_maxdivi = 0      return ;    }    var exparr = arr.filter( item => (item !== min && item != 0) )    if(exparr.length === 0){      arr_maxdivi = min      return;    }    else{      var modearr = arr.map(item =>        (item === min || item === 0)? item : item % min      )      maxDivisor(modearr)      }  }  maxDivisor(this.arr)  return arr_maxdivi}maxDivisor.prototype._getMinMulti = function(){  var arr = this.arr,    arr_minMulti  var totalmulti =    arr.reduce((multi,curvalue) => multi * curvalue)  if (totalmulti === 0) {    return 0  }  else {    var marr = arr.map((item) => totalmulti/item),    b = new maxDivisor(marr,false)    arr_minMulti = totalmulti / b.maxDivisor    return arr_minMulti  }}var a = new maxDivisor([12,9,6],true)console.log(a)            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 嘉兴市| 安图县| 克什克腾旗| 青阳县| 邹城市| 准格尔旗| 陇川县| 曲阳县| 肥城市| 永善县| 武平县| 界首市| 台前县| 望江县| 巴林右旗| 阜阳市| 高碑店市| 淳安县| 大城县| 金川县| 夏津县| 尉犁县| 永州市| 修水县| 会宁县| 漯河市| 崇左市| 新营市| 瑞昌市| 同江市| 壤塘县| 阿坝| 迁西县| 江山市| 胶南市| 安陆市| 休宁县| 鞍山市| 綦江县| 奉化市| 马山县|