Skip to content

Instantly share code, notes, and snippets.

@sourcedelica
Last active September 24, 2015 03:33
Show Gist options
  • Save sourcedelica/d3f0f75004d60bd0ab15 to your computer and use it in GitHub Desktop.
Save sourcedelica/d3f0f75004d60bd0ab15 to your computer and use it in GitHub Desktop.
// https://www.hackerearth.com/submission/1808199/
/* IMPORTANT: class must not be public. */
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class TestClass {
public static void main(String args[] ) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int numOfTests = Integer.parseInt(br.readLine());
String[] strArr;
long lcm;
long divisor = 1000000007;
List<Integer> primeList = new ArrayList<Integer>();
Set<Integer> inputSet = new HashSet<Integer>();
List<Integer> inputList = new ArrayList<Integer>();
List<Integer> inputList2 = new ArrayList<Integer>();
List<Integer> indicesList = new ArrayList<Integer>();
boolean isDivisible = false;
int inputNum, primeNum2, num;
primeList.add(2);
for(int i=3; i<10000; i+=2){
for(int primeNum : primeList){
if(i%primeNum == 0){
break;
}else if(primeNum*primeNum > i){
primeList.add(i);
break;
}
}
}
for(int i=0; i<numOfTests; i++){
br.readLine();
strArr = br.readLine().split(" ");
// inputSet.clear();
// inputList.clear(); BUG - these clear()s should be here, otherwise it reuses old data
// inputList2.clear();
// indicesList.clear();
for(int j=0; j<strArr.length; j++){
inputNum = Integer.parseInt(strArr[j]);
if(inputNum != 1)
inputSet.add(inputNum);
}
inputList.addAll(inputSet);
lcm = 1;
for(int k=0; k<primeList.size(); k++){
primeNum2 = primeList.get(k);
isDivisible = false;
for(int l=0; l<inputList.size(); l++){
num = inputList.get(l);
if(num % primeNum2 == 0){
isDivisible = true;
indicesList.add(l);
if(num/primeNum2 != 1)
inputList2.add(num/primeNum2);
}
}
if(isDivisible){
lcm = (lcm*primeNum2)%divisor;
if(inputList.size()-indicesList.size() == 0 && inputList2.size() == 0){
break;
}else{
for(int l=indicesList.size()-1; l>=0; l--){
inputList.remove((int)indicesList.get(l));
}
inputList.addAll(inputList2);
inputList2.clear();
indicesList.clear();
k--;
}
}
if(inputList.size() == 1){
lcm = (lcm*inputList.get(0))%divisor;
break;
}
}
System.out.println(lcm);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment