Problem:
Score : 300 points

Problem Statement

Takahashi is organizing a party.

At the party, each guest will receive one or more snack pieces.

Takahashi predicts that the number of guests at this party will be A or B.

Find the minimum number of pieces that can be evenly distributed to the guests in both of the cases predicted.

We assume that a piece cannot be divided and distributed to multiple guests.

Constraints

1 \leq A, B \leq 10^5

A \neq B

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B

Output

Print the minimum number of pieces that can be evenly distributed to the guests in both of the cases with A guests and B guests.

Sample Input 1

2 3

Sample Output 1

6

When we have six snack pieces, each guest can take three pieces if we have two guests, and each guest can take two if we have three guests.

Sample Input 2

123 456

Sample Output 2

18696

Sample Input 3

100000 99999

Sample Output 3

9999900000

Solution in Go (1.6) (judge verdict: Runtime Error)

package main

import (
	"fmt"
)

func main() {
	var a, b int
	fmt.Scanf("%d %d", &a, &b)
	answer := minSnack(a, b)
	fmt.Println(answer)
}

func minSnack(a, b int) int {
	aDivisors := findDivisors(a)
	bDivisors := findDivisors(b)
	var divisors []int
	finA := false
	finB := false

	for a, b := 0, 0; ; {
		if !finA && !finB && aDivisors[a] == bDivisors[b] {
			divisors = append(divisors, aDivisors[a])
			a++
			b++
		} else if finB || !finA && aDivisors[a] <= bDivisors[b] {
			divisors = append(divisors, aDivisors[a])
			a++
		} else if finA || !finB && aDivisors[a] >= bDivisors[b] {
			divisors = append(divisors, bDivisors[b])
			b++
		}
		if len(aDivisors) <= a {
			finA = true
		}
		if len(bDivisors) <= b {
			finB = true
		}
		if finA && finB {
			break
		}
	}
	minS := 1
	for _, v := range divisors {
		minS *= v
	}
	return minS
}

func findDivisors(x int) []int {
	var divisors []int
	for i := 2; i <= x; i++ {
		if x%i == 0 {
			x /= i
			divisors = append(divisors, i)
			i--
		}
	}
	return divisors
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}