アイデア:
<= B、LCM(A + K、B + K)=(A + K)*(B + K)/ GCD(A + K、B + K)=(A + K)*(B + Kを想定)/ GCD(B - 、A + K)(GCDに従って(A、B)= GCD(B - A))ので、Bを列挙 - 全ての要因であることができます。
実装:
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4 CONST LL INF = 0x3f3f3f3f3f3f3f3f 。 5 LL CAL(LLのX、LL Y、LL I、LL&ミネソタ州、LL&ANS) 6 { 7 場合(I> x)の 8 { 9 もし(Y + I - X < ミネソタ州) 10 { 11 ミネソタ州= Y + I - X; 12の ANS = I - X; 13 } 14 } 15 他の 16 { 17 のLL K = 0 。 18 であれば(X%I)K =(X / I + 1)* I - X。 19 のLL T =(X + K)*(Y + K)/ __gcd(Y - X、X + K)。 20 であれば(T < ミネソタ州) 21 { 22 ミネソタ州= T。 23の ANS = K。 24 } 25 } 26 } 27 のint main()の 28 { 29 LLのA、B。 30 一方、(CIN >> A >> B) 31 { 32 LL X =分(a、b)は、Y = MAX(A、B)。 33 であれば(Y%のX == 0){COUT << 0 << ENDL。続け; } 34 LLミネソタ州= INF、ANS = 0 。 35 のためには、(int型 i = 1 ; iは= Y <* - Xは、iが++ ) 36 { 37 であれば((Y - X)%I == 0 ) 38 { 39 CAL(X、Y、I、ミネソタ州、ANS) ; 40 もし(!(Y - X)/ I = I)CAL(X、Y、(Y - X)/ I、ミネソタ州、ANS)。 41 } 42 } 43 COUT << ANS << ENDL。 44 } 45 リターン 0 。 46 }