[백준] 21919. 소수 최소 공배수

원숭2·2022년 2월 15일
0

백준

목록 보기
40/54

문제

풀이

  1. 에라토스테네스의 체를 사용하여 주어진 수의 최댓값 까지 소수를 전부 구해놓음.
  2. 주어진 배열에서 for문을 돌며 소수인 것들 만 res배열에 넣어줌.
  3. res배열이 비어있을 경우 소수가 없단 뜻이므로 -1 print함.
  4. 아닐 경우 res배열에 for문을 돌며 최소공배수를 구해줌.
    (서로를 곱하고, 서로의 최대공약수로 나눠주면 최소공배수가 됨.)

코드

import sys
import math

def primeList(n : int) :
    prime = [True] * (n+1)
    prime[1] = False
    m = int(math.sqrt(n))
    
    for i in range(2, m+1) :
        if prime[i] == True :
            for j in range(i+i, n+1, i) :
                prime[j] = False

    return [i for i in range(2, n+1) if prime[i]]    

def solution() :
    n = int(sys.stdin.readline())
    nums = list(map(int, sys.stdin.readline().split()))
    
    tmp = primeList(max(nums))
    res = []
    for n in nums :
        if n in tmp :
            res.append(n)
    
    if not res :
        print(-1)
    else :
        calc = res[0]
        for r in res :
            calc = (r * calc) // math.gcd(r, calc)
        print(calc)
        
solution()

0개의 댓글