縦と横の最大公約数を求めて、縦と横をその値で割るのはどうでしょう。 2パターンしか試してませんが…… 最大公約数はユークリッドの互除法で求めています。(gcd関数)