최소 공배수


31

양의 정수 세트의 최소 공배수 A는 가장 작은 포지티브 정수 이므로, B각각 kA대해 양의 정수가 존재 n한다 k*n = B.

최소한 두 개의 양의 정수를 입력으로 받으면 최소 공배수를 출력합니다.

규칙

  • 기본 제공은 허용되지만 솔루션에서 사용하는 경우 GCD / LCM 기본 제공을 사용하지 않는 대체 솔루션을 포함하는 것이 좋습니다. 그러나 대체 솔루션은 점수에 전혀 포함되지 않으므로 전적으로 선택 사항입니다.
  • 모든 입력 및 출력은 사용자 언어에 대해 기본적으로 표현 가능한 범위 내에 있습니다. 언어가 기본적으로 임의의 큰 정수를 사용할 수있는 경우 솔루션은 임의로 큰 입력 및 출력으로 작동해야합니다.

테스트 사례

[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
[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

6
합리적으로 자주 오해되기 때문에 공식 LCM (a, b) = ab / GCD (a, b)는 두 개 이상의 숫자로 확장 되지 않습니다 (또는 그 문제에 대해서는 하나의 숫자까지!).
Greg Martin

답변:


4

실제로 12 1 바이트

기본 LCM 내장 기능을 향상시키는 방법을 모르겠지만 골프 제안은 여전히 ​​환영합니다. 온라인으로 사용해보십시오!

내장되지 않은 12 바이트 버전. 골프 제안을 환영합니다. 온라인으로 사용해보십시오!

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

언 골핑

          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.

내장을 사용할 수 있다는 것을 알고 있습니까?
Mego

1
@Mego 나는 그것을 추가 할 것이지만 내 이해는 내장이 권장되지 않았기 때문에 처음에는 사용하지 않았다.
Sherlock9

1
내장이 허용됩니다. 그것들은 전혀 실망하지 않습니다. 나는 종종 내장되지 않은 솔루션이 내장보다 훨씬 더 흥미 롭기 때문에 포함되도록 권장하고 싶었습니다.
Mego

1
실제로 1 바이트 읽습니다 .
programmer5000

2
@ programmer5000 언어가 실제로 호출되는 이유 일 수 있습니다.
Socratic Phoenix

17

자바 스크립트 (ES6), 36 바이트

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

1그것 부터 시작 하여 모두로 나눌 수있는 첫 번째 숫자입니다.


물론 ...이 기술로 루프를하는 것에 대해 생각했지만 재귀는 훨씬 짧습니다.
ETHproductions

1
이것은 천재입니다 ... 내가 기억 some하면 배열의 적어도 하나의 요소가 조건을 만족하면 true를 반환합니다.
WallyWest


11

젤리 , 3 바이트

æl/

LCM으로 줄입니다. 온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인 .

대체 버전, 6 바이트

ÆE»/ÆẸ

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인 .

작동 원리

Æ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.

8

파이썬, 69 65 52 50 바이트

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

Dennis 덕분에 2 바이트가 절약되었습니다!

매우 간단한 재귀 솔루션이므로 일부 테스트 사례가 작동하려면 재귀 제한을 약간 높게 설정해야합니다.


1
any발전기를 가지고; 괄호가 필요하지 않습니다.
Dennis

3
A=lambda l,i=1:all(i%a<1for a in l)or-~A(l,i+1)몇 바이트를 더 절약합니다.
Dennis

8

MATL , 7 바이트

&YFX>^p

내장되어 있지 않습니다.

온라인으로 사용해보십시오!

설명

입력 [8, 2, 1, 10]을 예로 들어 봅시다 .

&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

편집 (2017 년 6 월 9 일) : 릴리스 20.1.0YF 에서 두 가지 출력으로 수정되었습니다 . 비 요소 소수 및 제로 지수는 건너 뜁니다. 위의 코드에는 영향을 미치지 않으며 변경하지 않아도 작동합니다.


6

줄리아 (3 바이트) [비 내장 작업]

lcm     # Using LCM built-in (3 Bytes)

Dennis가 지적했듯이 Julia는 입력을 자동으로 벡터화한다는 것을 잊어 버렸습니다.

예:

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

6

PowerShell v2 +, 73 60 바이트

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

조건에 따라 input을 가져와 with $a로부터 위로 루프 합니다. 조건이되는 되 OT QUAL에 . 의미의 엘리먼트 루프 단부 즉 이다 의 약수 된다 요소와 동일 . 그런 다음 파이프 라인에 독방 이 남겨지고 출력이 암시 적입니다.$i=1$i++($a|?{!($i%$_)}).count-ne$a.count$a$i$a$i

테스트 사례

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

4

수학, 3 바이트

LCM

용법:

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

Out[1]= 2520

6
Mathematica가 Jelly와 일치 한 날은 내가 보지 못했던 날입니다.
Steven H.

3

체다, 33 바이트

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

새로운 것은 없습니다.

언 골프

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

기본적으로 이것은 하나에서 시작하여 LCM을 찾을 때까지 계속 증가합니다.


3

자바 스크립트 (ES6), 63 59 바이트

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

마지막 두 요소의 LCM을 재귀 적으로 찾습니다.


이것이 나의 해결책이었다 :a=>a.reduce((l,n)=>l*n/(g=(m,n)=>n?g(n,m%n):m)(l,n))
Neil

@Neil 원한다면 게시 할 수 있습니다. 내 기술이 그렇게 짧을 수 있을지 의심 스럽다 ...
ETHproductions


3

자바 스크립트 (ES6), 52 바이트

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

나는 reduce이 대답을 할 수있는 한 많이 수행하지만 분명히 @Hedi의 대답의 단순성 근처에 도달하지는 않을 것입니다.


3

자바 8, 75 59 121 89 바이트

유클리드 알고리즘과 LCM (A, B) = A * B / GCD (A, B)

  • 16 바이트 꺼짐 @carusocomputing 덕분에
  • 다중 입력 + 추가 62 바이트 추가
  • 32 바이트 꺼짐 @Olivier Grégoire에게 감사합니다

암호:

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;
}

줄 바꿈 제거 :

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;}

기술적으로 스 니펫이지만 추가 n->{...}하면 유효한 Java 8이된다고 생각합니다.
Magic Octopus Urn

감사. Java에서 람다를 보는 데 익숙해 지려고합니다. 람다를 사용하면 아마도 for-loop의 일부를 골프로 칠 수 있습니다. 그러나 나는 방법을 모른다.
Roman Gräf

네, 그 모든 것들이 자바에서 사후에 생각됩니다. 파이썬에서 배우는 것이 더 나을 것입니다 :).
Magic Octopus Urn

내가 빠진 것이 아니라면 둘 이상의 입력을 지원하지 않습니다
pinkfloydx33

GCD를 계산하면 훨씬 더 많은 골프를 즐길 수 있습니다 int g(int a,int b){return b<1?a:g(b,a%b);}. 그러면 LCM int l(int[]a){int l=1;for(int n:a)l=l*n/g(l,n);return l;}이 총 99 바이트 가 될 수 있습니다 .
Olivier Grégoire




2

J, 11 바이트

>./&.(_&q:)

LCM 내장을 사용하는 3 바이트 솔루션이 있습니다 .

*./

설명

>./&.(_&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

2

CJam, 18 17 16 바이트

Martin Ender 덕분에 1 바이트가 절약되었습니다.

LCM이 발견 될 때까지 증가합니다.

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

온라인으로 사용해보십시오


1
저는 CJam에 대해 잘 모르지만 재사용 성 규칙은 전체 프로그램이 아니라 기능에 대한 것입니다. 17 바이트 솔루션이 여러 실행에서 일관되게 작동하는 전체 프로그램이라면 문제가 없습니다.
Mego

2

라켓 13 바이트

lcm은 라켓에 내장 된 기능입니다 :

(apply lcm l)

테스트 :

(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))

산출:

14
8
24
40
90
35
1144
3080
420
1260
2520

아 그 구문을 어떻게 사용할 수 있습니까? 나는 라켓을 배우려고 할 때 항상 포기했습니다.
Roman Gräf

1
괄호 안의 첫 단어는 프로 시저 이름이고 나머지는 인수입니다. 인수가 프로 시저 인 경우 자체 대괄호 안에 있어야합니다. 값 (비 절차)은 대괄호없이 작성됩니다. 나는 그것이 함수형 프로그래밍에 대한 스트레스의 추가적인 이점을 가진 훌륭한 범용 언어라는 것을 알았습니다. Lisp에서 파생 되었기 때문에 프로그래밍 영역을 다루는 느낌도 얻습니다.
rnso

Rasp & Scheme에서 Lisp보다 코딩 키워드와 언어가 더 쉽다는 것을 알았습니다.
rnso

예,하지만 Lisp를 이해한다고 말했습니까? 나는 젤리 나 자바와 같은 언어를 더 좋아한다.
Roman Gräf

1
Java와 Racket의 주요 구문 차이는 f (a, b) vs (fab), x + y + z vs (+ xyz), x == y vs (eq? xy) 및 x = 2 vs (define x 2)입니다. 또는 이미 정의 된 경우 (set! x 2). 또한 public static void 또는 int char string 등과 같은 유형을 선언 할 필요가 없습니다. 다시 Racket에 관심을 가지기를 바랍니다.
rnso

2

R, 36 바이트 (내장되지 않음)

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

입력을받습니다. 그런 다음 mod를 사용하여 각 양의 정수를 테스트하십시오.


나는 당신이 cat당신의 마지막 주위 를 필요로 믿습니다i
주세페

@Giuseppe 내가 실행할 때 값이 잘 인쇄됩니다.
user5957401

여기서 토론을 참조하십시오 . 그러나 ec=T+5보다는 +4에 적합하다고 가정 합니다 cat().
Giuseppe

1
관계없이,이 일부를 golfed 수 v=scan();while(any((F=F+1)%%v)){};F함께 cat()또는 ec=T각각, 그 40 바이트 또는 39 제조. 그리고 +1, 아주 좋은 접근 방식입니다.
Giuseppe


1

하스켈, 10 바이트

foldr1 lcm

사용 예 : foldl1 lcm [5,2,9,10,3,4,4,4,7]-> 1260.


1

C #, 50 + 18 = 68 바이트

메소드 정의의 경우 50 바이트, LINQ 가져 오기의 경우 +18 바이트

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

다른 많은 답변과 거의 동일합니다. LCM을 찾을 때까지 재귀 적으로 계산합니다. 이것이 StackOverflowException을 얻지 못했다는 것에 약간 놀랐습니다. 따라서 실제로 재귀 버전이 실제로 1 바이트 더 깁니다.

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

언 골프 드 :

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
;

1

, 10 바이트

W$+o%g++oo

"하나가 작동 할 때까지 모든 수를 시도하십시오"전략을 사용합니다. 온라인으로 사용해보십시오!

            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

1

PHP, 42 74 바이트

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

똑바로 : 1에서 위로
루프 $f; 만약 $f*$a분할 내지$b 나머지없이, LCM은 발견된다.


나는 완전히 읽었습니다 at least... 여기에는 여러 매개 변수에 대한 코드가 있습니다.

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

루프 $f1 위쪽에서는 내부 루프는 $는 argc에 실행되지 않은 상태.
루프 $i에서 2$argc-1동안 $f*$argv[1]분할을 통해 $argv[$i]나머지없이.
두 루프는 깨진 : 인쇄 $f*$argument 1.



1

파이썬 3, 83 바이트

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

PPCG에 오신 것을 환영합니다!
Laikoni

온라인 사용해보기 와 같은 온라인 테스트 사이트에 대한 링크를 포함시킬 수 있습니다. 다른 사람들이 귀하의 답변을 쉽게 확인할 수 있습니다.
Laikoni

1

Brachylog v2, 8 바이트

{×↙Xℕ₁}ᵛ

온라인으로 사용해보십시오!

이것이 챌린지에 주어진 정의에 얼마나 직접적으로 매핑되는지는 재미 있습니다.

{     }ᵛ    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.

의심 스럽지만 느리지 만 상당히 짧은 솔루션 :

Brachylog v2, 5 바이트

f⊇p~d

온라인으로 사용해보십시오!

출력 변수를 통해 입력을 받고 입력 변수를 통해 출력을 제공합니다. 처음 네 가지 테스트 사례를 통해 도약하지만 여전히 다섯 번째를 기다리고 있습니다 ... 일반적으로 여전히 기본 솔루션으로 사용하고 올바르게 작동한다고 믿지만 왜 그렇지 않은지 모르겠습니다. 9, 6, 2, 1, 5내가 90의 LCM임을 확인했습니다. 주었을 이십분 전은.

(편집 : 16 시간 이내에 답변을 확인하고 5, 5, 7, 1, 1약 2 일 후 LCM과 함께 생성했습니다 .)

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

그리고 Fatalize의 Brachylog v1 솔루션을 우연히 번역하는 또 다른 완전히 다른 술어 :

Brachylog v2, 10 바이트

;.gᵗ↔z%ᵛ0<

온라인으로 사용해보십시오!

이것은 출력이 정수로 제한되지 않는다는 것을 깨닫기 전에이 도전에 대해 만든 솔루션에서 구해졌습니다 .

 .            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.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.