Greatest common divisor: Difference between revisions

Content added Content deleted
(→‎{{header|PowerShell}}: port short Python implementation)
Line 1,375: Line 1,375:


=={{header|JavaScript}}==
=={{header|JavaScript}}==
Iterative.
Iterative implementation
<lang javascript>function gcd(a,b) {
<lang javascript>function gcd(a,b) {
if (a < 0) a = -a;
a = Math.abs(a);
if (b < 0) b = -b;
b = Math.abs(b);

if (b > a) {var temp = a; a = b; b = temp;}
while (true) {
if (b > a) {
a %= b;
var temp = a;
if (a == 0) return b;
a = b;
b %= a;
b = temp;
}
if (b == 0) return a;

}
while (true) {
a %= b;
if (a === 0) { return b; }
b %= a;
if (b === 0) { return a; }
}
}</lang>
}</lang>


Recursive.
Recursive.
<lang javascript>function gcd_rec(a, b) {
<lang javascript>function gcd_rec(a, b) {
return b ? gcd_rec(b, a % b) : Math.abs(a);
if (b) {
return gcd_rec(b, a % b);
} else {
return Math.abs(a);
}
}</lang>
}</lang>


For an array of integers
Implementation that works on an array of integers.
<lang javascript>function GCD(A) // A is an integer array (e.g. [57,0,-45,-18,90,447])
<lang javascript>function GCD(arr) {
{
var i, y,
var n = A.length, x = A[0] < 0 ? -A[0] : A[0];
n = arr.length,
for (var i = 1; i < n; i++)
x = Math.abs(arr[0]);

{ var y = A[i] < 0 ? -A[i] : A[i];
while (x && y){ x > y ? x %= y : y %= x; }
for (i = 1; i < n; i++) {
x += y;
y = Math.abs(arr[i]);

}
return x;
while (x && y) {
(x > y) ? x %= y : y %= x;
}
x += y;
}
return x;
}
}


/* For example:
//For example:
GCD([57,0,-45,-18,90,447]) -> 3
GCD([57,0,-45,-18,90,447]); //=> 3
*/</lang>
</lang>


=={{header|Joy}}==
=={{header|Joy}}==