Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/std/math.zig
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ pub const sinh = @import("math/sinh.zig").sinh;
pub const cosh = @import("math/cosh.zig").cosh;
pub const tanh = @import("math/tanh.zig").tanh;
pub const gcd = @import("math/gcd.zig").gcd;
pub const lcm = @import("math/lcm.zig").lcm;
pub const gamma = @import("math/gamma.zig").gamma;
pub const lgamma = @import("math/gamma.zig").lgamma;

Expand Down Expand Up @@ -395,6 +396,7 @@ test {
_ = cosh;
_ = tanh;
_ = gcd;
_ = lcm;
_ = gamma;
_ = lgamma;

Expand Down
29 changes: 29 additions & 0 deletions lib/std/math/lcm.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//! Least common multiple (https://mathworld.wolfram.com/LeastCommonMultiple.html)
const std = @import("std");

/// Returns the least common multiple (LCM) of two integers (`a` and `b`).
/// For example, the LCM of `8` and `12` is `24`, that is, `lcm(8, 12) == 24`.
/// If any of the arguments is zero, then the returned value is 0.
pub fn lcm(a: anytype, b: anytype) @TypeOf(a, b) {
// Behavior from C++ and Python
// If an argument is zero, then the returned value is 0.
if (a == 0 or b == 0) return 0;
return @abs(b) * (@abs(a) / std.math.gcd(@abs(a), @abs(b)));
}

test lcm {
const expectEqual = std.testing.expectEqual;

try expectEqual(lcm(0, 0), 0);
try expectEqual(lcm(1, 0), 0);
try expectEqual(lcm(-1, 0), 0);
try expectEqual(lcm(0, 1), 0);
try expectEqual(lcm(0, -1), 0);
try expectEqual(lcm(7, 1), 7);
try expectEqual(lcm(7, -1), 7);
try expectEqual(lcm(8, 12), 24);
try expectEqual(lcm(-23, 15), 345);
try expectEqual(lcm(120, 84), 840);
try expectEqual(lcm(84, -120), 840);
try expectEqual(lcm(1216342683557601535506311712, 436522681849110124616458784), 16592536571065866494401400422922201534178938447014944);
}
Loading