2013-07-03 9 views
23

कैसे ढूंढें मैं जावास्क्रिप्ट का उपयोग कर सबसे बड़ा आम divisor खोजना चाहता हूँ।जेएस सबसे बड़ा आम divisor

कोई भी ऐसा करने से पहले और साझा करने के इच्छुक है?

उत्तर

57

यहां एक पुनरावर्ती समाधान है।

var gcd = function(a, b) { 
    if (! b) { 
     return a; 
    } 

    return gcd(b, a % b); 
}; 

हमारा आधार मामला है जब b0 के बराबर है। इस मामले में, हम a लौटते हैं।

जब हम रिकर्स कर रहे हैं, हम इनपुट तर्कों को स्वैप करते हैं लेकिन हम दूसरे तर्क के रूप में शेष a/b पास करते हैं।

+0

ठीक काम करता है, धन्यवाद! – bboy

+2

रिकर्सिव सबसे तेज़ नहीं है। –

+3

@FlorianF ठीक है, इसके लिए धन्यवाद। मुझे याद आया जहां ओपी ने सबसे तेज़ समाधान के लिए कहा था। – alex

7
function egcd(a, b) { 
    if (a == 0) 
     return b; 

    while (b != 0) { 
     if (a > b) 
      a = a - b; 
     else 
      b = b - a; 
    } 

    return a; 
} 
14

विकिपीडिया से लिया गया।

रिकर्सिव:

function gcd_rec(a, b) { 
    if (b) { 
     return gcd_rec(b, a % b); 
    } else { 
     return Math.abs(a); 
    } 
} 

Iterative:

function gcd(a,b) { 
    a = Math.abs(a); 
    b = Math.abs(b); 
    if (b > a) {var temp = a; a = b; b = temp;} 
    while (true) { 
     if (b == 0) return a; 
     a %= b; 
     if (a == 0) return b; 
     b %= a; 
    } 
} 
  • उपयोगकर्ता की टिप्पणी प्रति संपादित
+1

'if (a <0) a = -a; 'आप भी कर सकते हैं करें 'ए = Math.abs (ए); '(अगली पंक्ति के लिए समान) – user2428118

संबंधित मुद्दे