Problem:
電子蝿

ある計算機学者が電子空間に棲息する電子蝿という奇妙な生命体を見つけました。電子蝿の行動を観察しているうちに、この空間の (x, y, z) 地点にいる電子蝿は、次に以下の規則で示される (x', y', z')に移動することが分かりました。

ただし、a1, m1, a2, m2, a3, m3 は電子蝿の個体ごとに定まる正の整数です。A mod B は正の整数 A を正の整数 B で割ったときの余りです。

さらに観察をすると、ある種の電子蝿は (1,1,1) に置いてからしばらくすると、必ず (1,1,1) に戻ってくることがわかりました。このような蝿を戻り蝿と名付けました(1) 。

戻り蝿のデータを入力とし、(1,1,1) に戻ってくる最小の移動回数 (>0) を出力するプログラムを作成してください。なお 1< a1, m1, a2, m2, a3, m3 < 215 とします。

(1) a1 と m1, a2 と m2, a3 と m3 がそれぞれ互いに素 (公約数が 1) である時に戻ります。

Input

複数のデータセットが与えられます。各データセットは以下の形式で与えられます。

a1 m1 a2 m2 a3 m3

入力は６つの 0 を含む行で終わります。データセットの数は 50 を超えません。

Output

各データセットごとに、(1,1,1) に戻ってくる最小の移動回数(整数)を１行に出力してください。

Sample Input

2 5 3 7 6 13
517 1024 746 6561 4303 3125
0 0 0 0 0 0

Output for the Sample Input

12
116640000

Solution in JAVA (judge verdict: Wrong Answer)

import java.util.*;
import java.io.*;

public class Main {

	public static HashMap<Integer,Integer> factor (int n) {

		HashMap<Integer,Integer> ans = new HashMap<Integer,Integer>();
		int cnt = 1;
		while (n % 2 == 0) {
			n /= 2;
			ans.put(2, cnt);
			cnt++;
		}
		for (int i = 3; i <= n; i += 2) {
			cnt = 1;
			while (n % i == 0) {
				n /= i;
				ans.put(i, cnt);
				cnt++;
			}

		}

		return ans;
	}

	public static int lcm (int[] nums) {

		int sum = 1;
		HashMap<Integer,Integer> factor = new HashMap<Integer,Integer>();

		for (int i = 0; i < nums.length; i++) {
			HashMap<Integer,Integer> tmp = factor(nums[i]);
			for (int k : tmp.keySet()) {
				if(factor.containsKey(k))
					factor.put(k, Math.max(factor.get(k), tmp.get(k)));
				else
					factor.put(k,  tmp.get(k));
			}
		}

		for (int k : factor.keySet())
			sum *= Math.pow(k, factor.get(k));

		return sum;

	}

	public static int solve (int a1, int m1, int a2, int m2, int a3, int m3) {

		int x, y, z;
		x = a1 % m1;
		y = a2 % m2;
		z = a3 % m3;
		int[] val = {x,y,z};
		int[] val2 = {a1,a2,a3};
		int[] val3 = {m1,m2,m3};
		int[] cnt3 = {1,1,1};

		for (int i = 0; i < 3; i++) {
			while (val[i] != 1) {
				val[i] = val[i] * val2[i] % val3[i];
				cnt3[i]++;
			}
		}
		return lcm(cnt3);

	}

	public static void main (String[] args) throws IOException {

		BufferedReader br =
			new BufferedReader(new InputStreamReader(System.in));

		while (true) {

			String s = br.readLine();
			if (s == null) break;
			StringTokenizer st = new StringTokenizer(s, " ");
			if (st.countTokens() < 6) break;

			int a1 = Integer.parseInt(st.nextToken());
			int m1 = Integer.parseInt(st.nextToken());
			int a2 = Integer.parseInt(st.nextToken());
			int m2 = Integer.parseInt(st.nextToken());
			int a3 = Integer.parseInt(st.nextToken());
			int m3 = Integer.parseInt(st.nextToken());
			
			if (a1 == 0 && m1 == 0 && a2 == 0 && m2 == 0 && a3 == 0 && m3 == 0) break;

			System.out.println(solve(a1,m1,a2,m2,a3,m3));

		}

	}
}