Exercises

백준 프로그래밍: GCD

sysout.초코우유 2018. 4. 23. 17:36

주어진 숫자열의 나머지가 모두 같도록 하는 제수를 구하는 프로그램.


N개의 수에서 제일 작은 한 숫자를 골라 나머지 숫자열에서 모두 빼낸 후에 N-1개의 숫자열의 GCD를 구하면 끝나는 문제.


아래는 그 코드


public class GCD {
	static final int BIG=10000;
	
	GCD(int[] list){
		printDivisors(gcd(list));
	}
	public int gcd(int[] list) {
		int min=chooseMin(list);
		for(int i=0;i<list.length;i++) {
			if(list[i]!=min)
				list[i]=list[i]%min;
		}
		if(chooseMin(list)==min)
			return min;
		else
			return gcd(list);
	}
	
	public void printDivisors(int a) {
		for(int i=2;i<=a;i++) {
			if(a%i==0)
				System.out.printf("%d ",i);
		}
	}
	
	public int chooseMin(int[] list) {
		int min=BIG;
		for(int i=0;i<list.length;i++) {
			if(list[i]!=0 && min>list[i])
				min=list[i];
		}
		return min;
	}
	
	
	public static void main(String[] args) {
		int multiplier=0, numberOfNumbers=100;
		int[] numberList=new int[numberOfNumbers];
		multiplier=(int)(15*Math.random())+2;
		System.out.println(multiplier);
		System.out.println("생성된 숫자열");
		for(int i=0;i<numberOfNumbers;i++) {
			numberList[i]=multiplier*(int)(100*Math.random());
			System.out.printf("%d ",numberList[i]);
		}
		System.out.println();
		GCD gcd=new GCD(numberList);
	}
}