[Ava]Programmers N個の最大公倍数(Math)


N個のProgrammers最大公倍数

  • level2
  • Math
  • 🔍 問題の説明


    https://programmers.co.kr/learn/courses/30/lessons/12953
    2つの数の最小公倍数(Least Common Multiple)は、2つの入力倍数に共通する最小数です.たとえば、2と7の最小公倍数は14です.拡張定義後、n個の数の最小公倍数は、n個の数の倍数の最小公倍数となる.n個の数字の配列arrを入力すると、これらの数の最小公倍数を返す関数と解法を完了します.

    ✔制限


  • arrは、長さが1または15より大きい配列である.

  • arrの元素は100以下の自然数である.
  • ✔I/O


    arrresult[2,6,8,14]168[1,2,3]6

    💡 に答える


    複数の最大公倍数の方法を求めますか?
    まず2つの数の最大公倍数を求め,次いでこのような値と最大公倍数を求める.
    以上の過程を繰り返すだけでいいです!
  • 최대 공배수を求める:2つの数の積を최소 공약수で割る.
  • 최소 공약수救い:ユークリッド護法
  • 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r’를 구하고, 다시 r을 r’로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
    =>2つの数字(a,b)の間の余剰値を0とし、余剰値(a)に余剰値(b)を加え、余剰値(b)に余剰値(r)を加える.
    =>最終的には、残り(r)が0の場合、分割値(a)が持つ値が最大公約数となる.

    💬 ソースコード

    class Solution {
        public int solution(int[] arr) {
            int answer = arr[0];
            
            for(int i=1; i<arr.length; i++) answer = lcm(answer, arr[i]);
            
            return answer;
        }
        
        //최대공약수
        static int gcd(int a, int b){
            while(b>0){
                int r = a%b;
                a = b;
                b = r;
            }
            
            return a; //a,b의 최대공약수
        }
        
        //최대 공배수 = a*b/최대공약수
        static int lcm(int a, int b){
            return a*b/gcd(a,b);
        }
    }