Codeforces Round #560 (Div. 3) D. Almost All Divisors
問題概要
ある数 の と 以外の全ての約数 が与えられます. このとき, を求めてください. 条件を満たす が存在しない場合はその旨を報告してください.
制約
- すべての は相違なる
解法
ある数 の約数に があるとき, もまた の約数です. また, が( 以外の)最大の約数の時, は( 以外の)最大の約数になります.
よって, をソートすれば, がそれぞれ最小, 最大の約数になってくれるので, この積が解の候補 になってくれているわけです.
あとは が本当に条件を満たしているかどうかは を実際に約数列挙してその集合が と一致するかをみれば良いです.
実装
約数集合が一致しているかは std::set を使うと楽です( のような をあらわに考える必要がないです).