package study.exam;
import java.util.*;
public class Ex10 {
ArrayList<Integer> list; // 입력 숫자 저장 리스트
int count; // 입력할 숫자의 갯수
public static void main(String[] args) {
new Ex10().start();
}
// 시작
public void start() {
getInput(); // 숫자 입력받기
getGCM(); // 최대공약수 구하기
getLCM(); // 최소공배수 구하기
}
// 숫자 입력받기
public void getInput() {
list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
System.out.print("입력할 숫자의 갯수를 2 이상 10 이하의 정수로 입력 : ");
count = sc.nextInt();
System.out.println("2부터 10000사이의 정수 "+count+"개를 공백으로 구분하여 입력하시오.");
System.out.println("입력 예> 8 256 487... ");
System.out.print("입력 > ");
for(int i=0; i<count; i++) { // 입력할 숫자의 갯수만큼 반복
int score = sc.nextInt();
list.add(score);
}//end while
}
// 약수 반환 메서드
public ArrayList<Integer> getDivisor(int num) {
// System.out.println("최대약수 : "+num);
ArrayList<Integer> divisorList = new ArrayList<>();
for(int i=num; i>0; i--) {
if(num%i==0)
// System.out.println("약수등록 : "+ i);
divisorList.add(i); //나누어떨어지면 약수 등록(내림차순등록)
}
return divisorList;
}
/**
* 1. 제일 작은 수의 약수를 구한다.</br>
* 2. 구한 약수 중 큰값부터 다른 숫자들과 나누어 떨어지는지 비교한다.</br>
* 3. 모두 나누어 떨어지면 그 수가 최대 공약수이다.
* @return 최대공약수 반환
*/
public int getGCM() {
int gcm = 0; // 최대공약수
ArrayList<Integer> divisorList = getDivisor(Collections.min(list)); // 제일 작은 수의 약수리스트 반환
for(Integer i : divisorList) {
// System.out.println("약수 : "+i);
boolean result = true; // 모두 나누어지는지 판단
for(Integer j : list) {
// System.out.println("나누는 수 :"+j);
if(j%i!=0) {
result = false; // 하나라도 나누어떨어지지 않으면 false
break;
}
}
if(result) {
gcm = i;
break;
}
}//end i
System.out.println("최대공약수 : "+gcm);
return gcm;
}//end getGCM()
/**
* 1. 가장 큰 수를 정수배로 곱한다 </br>
* 2. 곱할때마다 다른 숫자들과 비교.</br>
* 3. 곱한 숫자를 다른 숫자들 모두로 나누어 떨어지면 최소공배수이다.
* @return 최소공배수 반환
*/
public int getLCM() {
int lcm = 0; // 최대공약수
int num = Collections.max(list); // 제일 큰 수 반환
for(int i=1; i<Integer.MAX_VALUE; i++) {
boolean result = true; // 모두 나누어지는지 판단
for(Integer j : list) {
if((num*i)%j!=0) {
result = false; // 하나라도 나누어떨어지지 않으면 false
break;
}
}
if(result) {
lcm = num*i;
break;
}
}//end for
System.out.println("최소공배수 : "+lcm);
return lcm;
}//end getLCM()
}