Problem:
問題 ２

　入力ファイルの１行目に正整数 n が書いてあり，
２行目には半角空白文字１つを区切りとして，
n 個の正整数が書いてある．
n は 2 または 3 であり，
２行目に書かれているどの整数も値は 108 以下である．
これら２個または３個の数の公約数をすべて求め，
小さい方から順に1行に1個ずつ出力せよ．
自明な公約数（「１」）も出力すること．

　
出力ファイルにおいては，
出力の最後行にも改行コードを入れること．

入出力例

入力例１

2
75 125

出力例１

1
5
25

入力例２

3
110 22 88

出力例２

1
2
11
22

入力例３

3
66 11 3

出力例３

1

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String args[]) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		try {
			int n = Integer.parseInt(br.readLine());
			String buf = br.readLine();
			StringTokenizer tnz = new StringTokenizer(buf);
			int[] numbers = new int[n];
			for (int i=0;i<n;i++) {
				numbers[i] = Integer.parseInt(tnz.nextToken());
			}
			Arrays.sort(numbers);
			if (n==2) {
				System.out.println(1);
				for (int i=2;i<=(numbers[0]/2);i++) {
					if (numbers[0]%i==0&&numbers[1]%i==0) {
						System.out.println(i);
					}
				}
				if (numbers[1]%numbers[0]==0) {
					System.out.println(numbers[0]);
				}
			}
			else if (n==3) {
				System.out.println(1);
				for (int i=2;i<=(numbers[0]/2);i++) {
					if (numbers[0]%i==0&&numbers[1]%i==0&&numbers[2]%i==0) {
						System.out.println(i);
					}
				}
				if (numbers[1]%numbers[0]==0&&numbers[2]%numbers[0]==0) {
					System.out.println(numbers[0]);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}