Problem:
Problem A: Ruins

In 1936, a dictator Hiedler who aimed at world domination had a deep obsession with the Lost Ark. A
person with this ark would gain mystic power according to legend. To break the ambition of the dictator,
ACM (the Alliance of Crusaders against Mazis) entrusted a secret task to an archeologist Indiana Johns.
Indiana stepped into a vast and harsh desert to find the ark.

Indiana finally found an underground treasure house at a ruin in the desert. The treasure house seems
storing the ark. However, the door to the treasure house has a special lock, and it is not easy to open
the door.

To open the door, he should solve a problem raised by two positive integers a and b inscribed on the door.
The problem requires him to find the minimum sum of squares of differences for all pairs of two integers
adjacent in a sorted sequence that contains four positive integers a1, a2 , b1 and b2 such that a = a1a2
and b = b1b2. Note that these four integers does not need to be different. For instance, suppose 33 and
40 are inscribed on the door, he would have a sequence 3, 5, 8, 11 as 33 and 40 can be decomposed into
3 × 11 and 5 × 8 respectively. This sequence gives the sum (5 - 3)2 + (8 - 5)2 + (11 - 8)2 = 22, which is
the smallest sum among all possible sorted sequences. This example is included as the first data set in
the sample input.

Once Indiana fails to give the correct solution, he will suffer a calamity by a curse. On the other hand,
he needs to solve the problem as soon as possible, since many pawns under Hiedler are also searching
for the ark, and they might find the same treasure house. He will be immediately killed if this situation
happens. So he decided to solve the problem by your computer program.

Your task is to write a program to solve the problem presented above.

Input

The input consists of a series of data sets. Each data set is given by a line that contains two positive
integers not greater than 10,000.

The end of the input is represented by a pair of zeros, which should not be processed.

Output

For each data set, print a single integer that represents the minimum square sum in a line. No extra
space or text should appear.

Sample Input

33 40
57 144
0 0

Output for the Sample Input

22
94

Solution in Haskell (judge verdict: Accepted)

import Control.Applicative
import Control.Monad
import Data.List

main :: IO ()
main = do
  [a, b] <- f
  unless (a == 0 && b == 0) $ do
    print $ solve a b
    main
  where
    f = map read <$> words <$> getLine

solve :: Int -> Int -> Int
solve a b = minimum $ do
  (x0, x1) <- divs a
  (y0, y1) <- divs b
  let [i, j, k, l] = sort [x0, x1, y0, y1]
  return $ (j - i) ^ 2 + (k - j) ^ 2 + (l - k) ^ 2

divs :: Int -> [(Int, Int)]
divs x = f 1 []
  where
    f d as
      | d ^ 2 > x = as
      | x `mod` d == 0 = f (d + 1) ((d, x `div` d) : as)
      | otherwise = f (d + 1) as