Least common multiple: Difference between revisions

Content added Content deleted
(→‎{{header|D}}: keep gcd separate so it can be reused; also allow bigint to return zero)
Line 182: Line 182:
<lang d>import std.stdio, std.bigint;
<lang d>import std.stdio, std.bigint;


T lcm(T)(T m, T n)
T lcm(T)(T m, T n) {
if (m == 0) return m;
in {
assert(m != 0 && n != 0);
if (n == 0) return n;
T r = (m * n) / gcd(m, n);
} body {
T m2 = m;
return (r >= 0) ? r : -r;
}
T n2 = n;
while (n2 != 0) {
T t2 = m2;
m2 = n2;
n2 = t2 % n2;
}


T gcd(T)(T a, T b) {
T result = (m * n) / m2;
return (result >= 0) ? result : -result;
while (b != 0) {
auto t = b;
b = a % b;
a = t;
}
return a;
}
}