g | x | w | all
Bytes Lang Time Link
135C250429T181924ZGordey R
001Thunno 2230423T161401ZThe Thon
003PARI/GP221220T141150ZCharles
017Ruby220426T023347ZnaffetS
002Vyxal220426T023105ZnaffetS
045Rust211218T131812ZEzhik
049APOL211217T142309ZGinger
020Python 3.9210401T094637Zwasif
008Brachylog v2190509T084802ZUnrelate
007Pyth190509T085812ZSok
083Python 3180710T170644ZHydreigo
036R171013T194940Zuser5957
044Scala170927T123813Zcubic le
034J170927T115729ZFrownyFr
067Jq 1.5170926T193435Zjq170727
nanA little late to the party170926T183120ZRobert B
nanPerl 5170915T153704ZXcali
008Japt170915T145757ZShaggy
007MATL160930T190244ZLuis Men
027J170515T094533Zprotist
019Axiom170515T051518Zuser5898
065PHP160930T213008ZJör
046Prolog SWI170512T221747Zeush77
021R161225T115539ZBillywob
013Racket161001T162742Zrnso
074PHP161001T043528ZTitus
089Java 8160930T201813ZLinnea G
016CJam161002T165137ZNeorej
075Java 7161003T050714ZGeobits
010Pip161002T051459ZDLosc
011J161001T161455Zmiles
001Actually161001T042104ZSherlock
003Mathematica161001T024140Zalephalp
010Perl 6161001T013922ZBrad Gil
nanC#161001T013230Zmilk
010Haskell160930T214448Znimi
009Pyth160930T214107ZTheBikin
017Brachylog160930T210718ZFatalize
052JavaScript ES6160930T202800ZNeil
003Jelly160930T185454ZDennis
002Dyalog APL160930T190614ZDennis
060PowerShell v2+160930T190315ZAdmBorkB
059JavaScript ES6160930T190419ZETHprodu
033Cheddar160930T191326ZDowngoat
036JavaScript ES6160930T190901ZHedi
006Pyth160930T191822ZMaltysen
003MATL160930T185952ZLuis Men
003Julia 3 Bytes [Working on NonBuiltin]160930T190535ZMagic Oc
050Python160930T185954Zxenia
00205AB1E/2sable160930T185352Zacrolith

C, 135 bytes

n[9],i,c,f;main(){
do{scanf("%d",&n[i]);}while(n[i++]!=0);
for(i=1;;++i,f=1){for(c=0;n[c]!=0;++c)if(i%(n[c])>0)f=0;if(f)return i;}
}

accepts numbers untill it gets 0 as an input

Thunno 2, 1 byte

ŀ

Try it online!

Non built-in,  6 5  4 bytes:

ƘŒS~

Try it online!

-1 thanks to @Jacob

Explanation

ŀ  # Implicit input. Built-in to calculate LCM. Implicit output.

ƘŒS~  # Implicit input
Ƙ     # Find the first positive integer where:
 Œ    #  The number mod the input (vectorises)
  S~  #  Has a sum of 0 (i.e. it contains only zeros)
      # Implicit output

PARI/GP, 3 bytes

lcm

Without builtins, 50 bytes:

v->fold((a,b)->for(k=a,a*b,k%b||k%a||return(k)),v)

The forstep version is 1 byte longer. Older versions can shave 2 bytes with | in place of ||.

Ruby, 17 bytes

->x{x.inject:lcm}

Attempt This Online!

Vyxal, 2 bytes

∆Ŀ

Try it Online!

Rust, 45 bytes

|i:&[_]|(1..).find(|v|i.iter().all(|a|v%a<1))

Try it online!

Iterates over all numbers until finding the first one which is divisible by all the numbers in the given slice. Hey, it saves bytes!

APOL, 49 bytes

v(0 1);v(1 i);w(⊕(ƒ(s(¹) %(⁰ I(∋)))) ∆(0));-(⁰ 1)

This could almost certaintly be made shorter, maybe I'll come back to it later.

Python 3.9, 20 bytes

import math
math.lcm

Now Python 3.9 has a builtin in math module to calculate LCM of two or more integers.

Brachylog v2, 8 bytes

{×↙Xℕ₁}ᵛ

Try it online!

It's funny just how directly this maps on to the definition given in the challenge.

{     }ᵛ    Each element of
            the input
 ×          multiplied by
  ↙X        some arbitrary and inconsistent integer
    ℕ₁      is a natural number,
       ᵛ    which is the same for each element,
            and is the output.

A suspiciously slow but significantly shorter solution:

Brachylog v2, 5 bytes

f⊇p~d

Try it online!

Takes input through the output variable and gives output through the input variable. Rips right through the first four test cases but I'm still waiting on the fifth... Ordinarily, I'd still make it my primary solution and just trust that it works correctly, but I don't know why it hasn't confirmed that 90 is the LCM of 9, 6, 2, 1, 5 when I gave it 90 twenty minutes ago.

(Edit: It confirmed the answer after no more than 16 hours, and generated it alongside the LCM of 5, 5, 7, 1, 1 after about two days.)

         The output variable
   ~d    with duplicates removed
  p      is a permutation of
 ⊇       a sublist of
f        the factors of
         the input variable.

And another completely different predicate that accidentally more-or-less translates Fatalize's Brachylog v1 solution:

Brachylog v2, 10 bytes

;.gᵗ↔z%ᵛ0<

Try it online!

This was salvaged from a solution I'd made for this challenge before I realized the output wasn't restricted to being an integer.

 .            The output
; gᵗ↔z        paired with each element of
              the input,
      %ᵛ      when the first element of each pair is taken mod the second, is always
        0     zero.
              Furthermore, the output
         <    is strictly greater than
        0     zero.

Pyth, 7 bytes

f!s%LTQ

Try it online!

Python 3, 83 bytes

import math,functools as i
t=lambda t:i.reduce(lambda a,b:int(a*b/math.gcd(a,b)),t)

R, 36 bytes (not builtin)

v=scan();i=1;while(any(i%%v))i=i+1;i

Takes the input. Then tests each positive integer by taking the mod.

Scala, 44 bytes

Stream.from(1).find(i=>x.forall(i%_==0)).get

Try it online!

J, 34 bytes

*/@((0 1+])^:(*@+/@:|*/)^:_>./,1:)

A while loop iterating through multiples of the largest number in input.

Try it online!

Jq 1.5, 67 bytes

Not very smart. Just tests each i from 2 to product of numbers.

first(range(2;1+reduce.[]as$x(1;.*$x))as$i|select(all($i%.==0))|$i)

More efficient but longer:

def g(a;b):if b<1then a else g(b;a%b)end;reduce.[]as$x(1;.*$x/g(.;$x))

Try it online!

A little late to the party, but I didn't see an AWK answer.

AWK, 49 bytes

{for(x=1;x&&++m;)for(x=i=0;i++<NF;)x+=m%$i;$0=m}1

Try it online!

NOTE: The link has 2 extra bytes m= in front of the x=1;x... to simplify testing/allow multiple inputs/outputs. However, the m= fails for single/repeated input value of 1. The code as written handles 1 fine.

Perl 5, 52 + 2 (-pa) = 54 bytes

$r=$\=$_;while($r){$r=0;$r||=$\%$_ for@F;$r&&$\++}}{

Try it online!

Japt, 8 bytes

@e!vX}a1

Try it

MATL, 7 bytes

&YFX>^p

No builtin.

Try it online!

Explanation

Let's take input [8, 2, 1, 10] as an example.

&YF    % Take array implicitly. Push vector of prime factors and matrix of exponents 
       % of factorization, where each row represents one of the input numbers
       %   STACK: [2 3 5], [3 0 0; 1 0 0; 0 0 0; 1 0 1]
X>     % Maximum of each column
       %   STACK: [2 3 5], [3 0 1]
^      % Element-wise power
       %   STACK: [8 1 5]
p      % Product of array
       %   STACK: 40
       % Implicitly display

EDIT (June 9, 2017): YF with two outputs has been modified in release 20.1.0: non-factor primes and their (zero) exponents are skipped. This doesn't affect the above code, which works without requiring any changes.

J, 27 bytes

not using built ins, naive solution

>:0 i.~+/"1 i|"1 0>:i.*/i=.

usage

>:0 i.~+/"1 i|"1 0>:i.*/i=.9 6 2 1 5

returns 90

Axiom, 19 bytes

f(x)==reduce(lcm,x)

Could be perhaps better and right but longer

f(x:List PI):PI==reduce(lcm,x)

PHP, 65 Bytes

<?for($t=1;$t&&++$i;$t=!$t)foreach($_GET as$v)$t*=$i%$v<1;echo$i;

Try it online!

or

for(;++$i;!$t?:die("$i"))for($n=$t=1;$v=$argv[$n++];)$t*=$i%$v<1;

or

<?for($t=1;++$i;$t=!$t?:die("$i"))foreach($_GET as$v)$t*=$i%$v<1;

PHP, 96 Bytes

with 2 loops

while(1<count($a=&$_GET[i])){$e=array_pop($a);for($i=0;($m=++$i*$e)%$a[0];);$a[0]=$m;}echo$a[0];

based on set theory 128 Bytes

$p=array_product($a=$_GET[i]);echo min(array_intersect(...array_map($r=function($n)use($p){return range($n,$p,$n);},$_GET[i])));

Prolog (SWI), 46 bytes

l([],1).
l([X|Y],P):-l(Y,Q),P is X*Q/gcd(X,Q).

Try it online!

Another solution, 59 bytes:

l(A,X):-between(1,inf,X),forall(member(Y,A),X mod Y=:=0),!.

R, 30 21 bytes

Using the mLCM function from the numbers package:

numbers::mLCM(scan())

Or without builtins (81 bytes):

L=function(x,y,g=function(x,y,r=x%%y)`if`(r,g(y,r),y))x*y/g(x,y)
Reduce(L,scan())

We first define a function L for the pair-wise LCM and then apply it iteratively using Reduce.

Racket 13 bytes

lcm is a built-in function in Racket:

(apply lcm l)

Testing:

(define (f l)
   (apply lcm l))

(f (list 7 2)) 
(f (list 8 1)) 
(f (list 6 4 8)) 
(f (list 8 2 1 10)) 
(f (list 9 6 2 1 5))
(f (list 5 5 7 1 1)) 
(f (list 4 13 8 8 11 1))
(f (list 7 2 2 11 11 8 5))
(f (list 1 6 10 3 4 10 7))
(f (list 5 2 9 10 3 4 4 4 7)) 
(f (list 9 7 10 9 7 8 5 10 1))

Output:

14
8
24
40
90
35
1144
3080
420
1260
2520

PHP, 42 74 bytes

for(;($p=++$f*$argv[1])%$argv[2];);echo$p;

straight forward:
loop $f from 1 upwards; if $f*$a divides through $b without a remainder, the LCM is found.


I totally had overread the at least ... here´s the code for any number of parameters:

for(;$i<$argc;)for($p=$argv[$i=1]*++$f;++$i<$argc&$p%$argv[$i]<1;);echo$p;

Loop $f from 1 upwards while inner loop has not run to $argc.
Loop $i from 2 to $argc-1 while $f*$argv[1] divides through $argv[$i] without a remainder.
both loops broken: print $f*$argument 1.

Java 8, 75 59 121 89 bytes

Uses the Euclidean Algorithm and the fact that LCM(A, B)= A * B / GCD(A, B)

Code:

public static int lcm(int l, int c){
  for(int i=1;i<=l&&i<=c;++i) 
    if (i%l==0&&i%c==0)
      return l*c/i;
}
public static int lcm(int...x){
  int y=x[0];
  for(int j:x){
    y=lcm(j,y);
  }
  return y;
}

Remove line-breaks:

int g(int a,int b){return b<1?a:g(b,a%b);}

l->{int l=1;for(int n:a)l=l*n/g(l,n);return l;}

CJam, 18 17 16 bytes

1 byte saved thanks to Martin Ender.

Incrementing until the LCM is found.

q~0{)_2$f%:+}g\;

Try it online

Java 7, 75 bytes

int f(int[]a){int i=1,s=1;for(;s>0;i++){s=0;for(int b:a)s+=i%b;}return--i;}

A simple two-loop method. Start at one and check to see when all the remainders add to zero.

I had to jump through some dumb hoops with s. There's probably a better way to do that, but it's 1:00 AM and it'll have to wait :/

Pip, 10 bytes

W$+o%g++oo

Uses the "try every number until one works" strategy. Try it online!

            o is preinitialized to 1, g is list of cmdline args
   o%g      Mod o by each arg
 $+         Sum (truthy if any nonzero, falsy if all zero)
W           Loop while that expression is truthy:
      ++o     Increment o
         o  Autoprint o

J, 11 bytes

>./&.(_&q:)

There is a solution for 3 bytes using the LCM builtin.

*./

Explanation

>./&.(_&q:)  Input: array of integers A
      _&q:   Get the prime exponents of each integer in A
>./&         Reduce by maximum on the lists
   &. _&q:   Convert the list of exponents back to an integer

*./  Input: array of integers A
  /  Reduce using
*.     LCM

Actually, 12 1 byte

Golfing suggestions are still welcome, though I'm not sure how to improve on the raw LCM built-in. Try it online!

A 12-byte version without the built-in. Golfing suggestions welcome. Try it online!

╗2`╜@♀%ΣY`╓N

Ungolfing

          Implicit input array.
╗         Save array in register 0.
2`...`╓   Starting with f(0), find the first (two) x where f(x) returns a truthy value.
          These two values will be 0 and our LCM.
  ╜         Push array from register 0.
  @         Swap the top two values. Stack: x, array
  ♀%        Map % over x and array, returning (x % item) for each item in array.
  ΣY        If the sum of all the modulos equals 0, x is either 0 or our LCM.

N         Push the last (second) value of our results. This is our LCM.
          Implicit return.

Mathematica, 3 bytes

LCM

Usage:

In[1]:= LCM[9, 7, 10, 9, 7, 8, 5, 10, 1]                                        

Out[1]= 2520

Perl 6, 10 bytes

{[lcm] @_}

basically the same as:

sub ( *@_ ) { @_.reduce: &infix:< lcm > }

C#, 50+18 = 68 bytes

50 bytes for method defintion, +18 bytes for LINQ import.

using System.Linq;int L(int[]n,int i=1)=>n.All(x=>1>i%x)?i:L(n,i+1);

Pretty much the same as a lot of other answers. Counts up recursively until it finds the LCM. I was a bit surprised this didn't get a StackOverflowException, so I also have a non-recursive version which is actually just 1 byte longer.

using System.Linq;n=>{for(int i=1;;i++)if(n.All(x=>1>i%x))return i;};

Ungolfed:

using System.Linq;            // Import LINQ
int L(int[] n, int i = 1) =>  // Function declaration
    n.All(x => 1 > i % x)     // Check if each x in n divides i
        ? i                   // And if so return i
        : L(n, i + 1)         // Otherwise increment i and recurse
;

Haskell, 10 bytes

foldr1 lcm

Usage example: foldl1 lcm [5,2,9,10,3,4,4,4,7] -> 1260.

Pyth, 9 bytes

.U/*bZibZ

A program that takes input of a list on STDIN and prints the result.

Try it online or verify all test cases

How it works

.U/*bZibZ  Program. Input: Q
.U         Reduce Q by (implicit input fill):
   *bZ      Product of current and next value
  /   ibZ   divided by GCD of current and next value
           Implicitly print

Brachylog, 17 bytes

,.#>=g:?z:%a#=h0,

Try it online!

Explanation

,.#>=               Output is a strictly positive integer
     g:?z           Zip the Output with the Input
         :%a        Compute Output mod I for each I in the Input
            #=h0,   All results must be equal to 0

JavaScript (ES6), 52 bytes

a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))

I reduced this answer as much as I could but I'm obviously not going to get anywhere near the simplicity of @Hedi's answer.

Jelly, 3 bytes

æl/

Reduces by LCM. Try it online! or verify all test cases.

Alternate version, 6 bytes

ÆE»/ÆẸ

Try it online! or verify all test cases.

How it works

ÆE»/ÆẸ  Main link. Argument: A (array)

ÆE      Yield all prime exponents of each integer in A.
  »/    Reduce columns (exponents that correspond to the same prime) by maximum.
    ÆẸ  Turn the resulting array of prime exponents into the corresponding integer.

Dyalog APL, 2 bytes

∧/

Reduces by LCM. Test it on TryAPL.

PowerShell v2+, 73 60 bytes

param($a)for($i=1;($a|?{!($i%$_)}).count-ne$a.count){$i++}$i

Takes input $a, loops upward from $i=1 with $i++, based on a conditional. The condition is ($a|?{!($i%$_)}).count being -notequal to $a.count. Meaning, the loop ends when the elements of $a that are divisors of $i is equal to the elements of $a. Then, a solitary $i is left on the pipeline, and output is implicit.

Test Cases

PS C:\Tools\Scripts\golfing> @(7,2),@(8,1),@(6,4,8),@(8,2,1,10),@(9,6,2,1,5),@(5,5,7,1,1),@(4,13,8,8,11,1)|%{($_-join',')+" -> "+(.\least-common-multiple.ps1 $_)}
7,2 -> 14
8,1 -> 8
6,4,8 -> 24
8,2,1,10 -> 40
9,6,2,1,5 -> 90
5,5,7,1,1 -> 35
4,13,8,8,11,1 -> 1144

PS C:\Tools\Scripts\golfing> @(7,2,2,11,11,8,5),@(1,6,10,3,4,10,7),@(5,2,9,10,3,4,4,4,7),@(9,7,10,9,7,8,5,10,1)|%{($_-join',')+" -> "+(.\least-common-multiple.ps1 $_)}
7,2,2,11,11,8,5 -> 3080
1,6,10,3,4,10,7 -> 420
5,2,9,10,3,4,4,4,7 -> 1260
9,7,10,9,7,8,5,10,1 -> 2520

JavaScript (ES6), 63 59 bytes

f=([x,...a])=>a[0]?x*f(a)/(g=(m,n)=>n?g(n,m%n):m)(x,f(a)):x

Recursively finds the LCM of the last two elements.

Cheddar, 33 bytes

(n,i=1)f->n.any(i&(%))?f(n,i+1):i

Nothing super new.

Ungolfed

(n, i = 1) f ->
  n.any(j -> i % j) ?
    f(n, i + 1) :
    i

Basically this starts at one and keeps increasing until it finds an LCM

JavaScript (ES6), 36 bytes

f=(a,i=1)=>a.some(v=>i%v)?f(a,i+1):i

Starting from 1 it's the first number that can be divided by all.

f=(a,i=1)=>a.some(v=>i%v)?f(a,i+1):i
;

console.log(f([7, 2]));
console.log(f([8, 1]));
console.log(f([6, 4, 8]));
console.log(f([8, 2, 1, 10]));
console.log(f([9, 6, 2, 1, 5]));
console.log(f([5, 5, 7, 1, 1]));
console.log(f([4, 13, 8, 8, 11, 1]));
console.log(f([7, 2, 2, 11, 11, 8, 5]));
console.log(f([1, 6, 10, 3, 4, 10, 7]));
console.log(f([5, 2, 9, 10, 3, 4, 4, 4, 7]));
console.log(f([9, 7, 10, 9, 7, 8, 5, 10, 1]));

Pyth - 7 6 bytes

No builtin.

*F{sPM

Try it online here.

MATL, 3 bytes

&Zm

This uses the builtin function with array input.

Try it online!

Julia (3 Bytes) [Working on Non-Built-in]

lcm     # Using LCM built-in (3 Bytes)

As Dennis pointed out, I keep forgetting that Julia automatically vectorizes inputs.

Example:

println(lcm(1,2,3,4,5,6,7,8,9)) #Prints 2520

Python, 69 65 52 50 bytes

A=lambda l,i=1:any(i%a for a in l)and A(l,i+1)or i

2 bytes saved thanks to Dennis!

Pretty straightforward recursive solution, you will need to make the recursion limit a bit higher for some of the test cases to work.

05AB1E/2sable, 2 bytes

.¿

Try it online! in 05AB1E
or 2sable