수열 A가 주어진다.
이 중 소수들의 최소공배수를 구하는 문제이다.
소수의 최소 공배수란 말이 사실 이상한 말이긴 하다.
소수들의 최소 공배수는 곧 소수들의 곱과 마찬가지이다.
즉, 이 문제는 소수를 구하고, 구한 소수값들을 곱한 것이 답이다.
단 여기서 중요한 것은 수열에 값이 중복되어 나올 수 있으므로 이 부분을 처리해줘야하는 것이다.
(ex. 2 2라면 소수는 2이므로 2*2가 아닌 2가 답이 되어야 함)
참고로, 수학과에서 배운 내용이지만 N의 약수 중 소수를 구하기 위해선 2 ~ N까지 모두 검사하지 않고 2 ~ 까지만 확인하면 된다.
따라서, for문을 (int) 까지만 수행시켜 약수로 나눠지는지 아닌지를 확인하면 된다.
import java.io.*;
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
static FastReader sc = new FastReader();
static boolean check(int prime) {
// 소수인지 판별 여부
// 2 ~ sqrt(prime)까지만 검사하면 된다.
int right = (int) Math.sqrt(prime);
for(int i =2;i<=right;i++) {
if(prime % i==0) return false;
}
return true;
}
public static void main(String[] args) {
int N = sc.nextInt();
long ans = 1;
boolean[] arr = new boolean[1000001];
for(int i =0;i<N;i++) {
int prime = sc.nextInt();
if(!arr[prime]&&check(prime)) {
// arr[prime] = true라면 이미 검사한 숫자이므로 제외
arr[prime] = true;
ans*=prime;
}
}
if(ans==1) ans = -1;
System.out.println(ans);
}
static class FastReader // 빠른 입력을 위한 클래스
}