import sys
input = sys.stdin.readline
def get_prim_number(input_Num):
last_num = input_Num
visited = [False for _ in range(last_num+1)]
visited[0] = True
visited[1] = True
result = []
for num in range(2,last_num+1):
if not visited[num]:
result.append(num)
for new_num in range(2*num,last_num+1,num):
visited[new_num] = True
return result
N = int(input())
arr = list(map(int,input().split()))
result = []
max_num = max(arr)
prim_set = get_prim_number(max_num)
for val in arr:
if val in prim_set:
result.append(val)
if len(result)>0:
answer = 1
result = set(result)
for prim in result:
answer*=prim
print(answer)
else:
print(-1)
이 문제는 소수를 구하고, 소수가 있으면, SET에 추가를 해주고,
전부 판별을 한 뒤에,
아무것도 없으면 -1 을,
그리고 최소공배수를 출력해주면 된다.
이 문제에서 많이 틀렸던 이유는
중복되는 소수가 온다는걸 깜빡했었다.
즉 2 2 3 5 7 이라하면, 전체를 그냥 곱하기만 하면, 420이 된다.
그러나 실제 최소공배수는 210이므로,
이러한 점을 주의하기만 하면 되는 문제였다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 21921 블로그 (0) | 2021.06.10 |
---|---|
[BOJ/백준] 21920 서로소 평균 (0) | 2021.06.10 |
[BOJ/백준] 21918 전구 (0) | 2021.06.10 |
[BOJ/백준] 17470 배열 돌리기 5 (0) | 2021.06.10 |
[BOJ/백준] 20924 트리의 기둥과 가지 (0) | 2021.06.07 |