https://yukicoder.me/problems/no/816
前提知識
解説
https://yukicoder.me/submissions/340724
答えのCを全列挙する。
そのまま全列挙すると10^18個あって無理なので、候補を絞る。
条件2「どの 2 つの自然数を足しても、残った 1 つの数の倍数になる。 」を使おう。
A+Bの約数がCであるので、A+Bの約数を全列挙して、その中で条件を満たすものを答えとする。
約数列挙はO(sqrt(N))で行えるので、やると答え。
方法は↑の前提知識の方に書いた。
ll A, B; //--------------------------------------------------------------------------------------------------- void _main() { cin >> A >> B; auto ed = enumdiv(A + B); fore(C, ed) { if (A == C) continue; if (B == C) continue; if ((A + C) % B != 0) continue; if ((B + C) % A != 0) continue; cout << C << endl; return; } cout << -1 << endl; }