Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

전공공부

[BOJ_21919] 소수 최소 공배수 본문

Study/Problem Solving

[BOJ_21919] 소수 최소 공배수

monitor 2023. 11. 23. 23:38

설명


이제껏 풀었던 기법을 모두 사용했다 (유클리드 호제법 : 최소공배수) lcm = (a*b) / GCD(a,b); 

private static long lcm(long a ,long b) {
    long lcm = 0L;
    for (int i = 0; i < primes.size(); i++) {
        lcm = (a*b) / gcd(a, n);
    }
    return lcm;
}

소수 구하기는 모두 시도 하되 Math.sqrt(n) 만큼 반복문을 돌리기

private static boolean isPrime(long n) {
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

최대공약수 GCD이용 

private static long gcd(long a, long b) {
    if(b == 0)
    {
        return a;
    }
    else{
        return gcd(b,a%b);
    }
}

 

사실 위를 제대로 이해하려면 정수론을 공부해야 한다고 한다만 암호학에 관심을 두지 않고 있기 때문에 해당 공식들을 보고 많이 풀어서 외워서 적용했다.

 

 

코드


package Math;
import java.util.*;

public class BOJ_21919 {
    private static long gcd(long a, long b) {
        if(b == 0)
        {
            return a;
        }
        else{
            return gcd(b,a%b);
        }
    }

    private static boolean isPrime(long n) {
        if (n < 2) return false;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }

    private static long lcmOfPrimes(List<Long> primes) {
        long lcm = 1L;
        for (int i = 0; i < primes.size(); i++) {
            lcm *= primes.get(i) / gcd(lcm, primes.get(i));
        }
        return lcm;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        long[] A = new long[N];

        // 소수들 저장
        List<Long> primes = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            A[i] = sc.nextLong();

            // 소수일 경우 primes 배열에 추가
            if (isPrime(A[i])) {
                primes.add(A[i]);
            }
        }

        // 소수가 하나도 없으면 -1 출력
        if (primes.size() == 0) {
            System.out.println(-1);
        } else {
            // 소수들의 최소공배수 출력
            System.out.println(lcmOfPrimes(primes));
        }
    }
}
 

21919번: 소수 최소 공배수

수열 중에 소수는 2, 3, 5가 있다.

www.acmicpc.net

 

'Study > Problem Solving' 카테고리의 다른 글

[BOJ_21275] 폰 호석만  (0) 2023.11.26
[BOJ_10171] 고양이  (1) 2023.11.24
[BOJ_21920] 서로소 평균  (1) 2023.11.22
[BOJ_4134] 다음 소수  (3) 2023.11.21
[BOJ_2960] 에라토스테네스의 체  (1) 2023.11.20