백준 온라인 저지 21919번 소수 최소 공배수

김선모·2024년 1월 9일

Baekjoon Online Judge

목록 보기
13/31
post-thumbnail

문제


행복이는 길이가 NN인 수열 AA에서 소수들을 골라 최소공배수를 구해보려고 한다.

행복이를 도와 이를 계산해주자.

입력


첫째 줄에 수열 AA의 길이 NN이 주어진다. (1N10,000)(1 \le N \le 10,000)

그 다음줄에는 수열 AA의 원소 AiA_{i}가 공백으로 구분되어 주어진다. (2Ai1,000,000)(2 \le A_{i} \le 1,000,000)

답이 263 미만인 입력만 주어진다.

출력


첫째 줄에 소수들의 최소공배수를 출력한다.

만약 소수가 없는 경우는 -1을 출력한다.

예제 입출력

예제 입력 1
5
2 3 5 6 8
예제 출력 1 
30
수열 중에 소수는 2, 3, 5가 있다.
예제 입력 2 
4
4 16 64 256
예제 출력 2 
-1
소수가 없으므로 -1 이다.

풀이


from math import lcm
n = 1000000
a = [0,0] + [1] * (n+1)
for i in range(2,int(n**0.5)+1) :
    if a[i] :
        for j in range(i*2,n+1,i) :
            a[j] = 0

command = 'lcm('
N = int(input())
A = list(map(int,input().split()))
for i in A :
    if a[i] :
        command += str(i) + ','
if command == 'lcm(' :
    print(-1)
else :
    command = command.rstrip(',') + ')'
    print(eval(command))

참 근래 짠 코드중 가장 더럽게 짠 것 같다. 최적화된 에라토스테네스의 체를 사용해 1,000,000 이하의 모든 소수를 판별해놓고 A를 입력받아 A가 소수라면 command 변수의 str 형식으로 값을 저장하고.. eval 함수를 통해 최종 출력해줬다. 코드가 이상해서 글로 풀어쓰기도 어렵네

참 내가 짠 코드중 가장 이상한 코드일 것 같다.

0개의 댓글