CF1152C Neko does Maths

给定两个正整数a,b,找到非负整数k使a+k与b+k的最小公倍数最小,如有多解输出最小的k
b ( 1≤a,b≤1e9)
.

主要思路:更相减损法

已知 : a,b (a > b)
求证:最小的 lcm (a + k, b + k) 的最小的 k

因为 lcm (a + k,b + k) = ( a + k ) × \times × (b + k) / gcd( a + k,b + k)
根据更相减损法 得: lcm (a + k,b + k) = (a + k,b + k) / gcd(b + k,a -b);
因为 gcd ( b + k,a - b) 一定为 (a - b) 的因子,
设 w = gcd( b + k, a - b)
故枚举 (a - b) 的因子,
为了保证 k,lcm( a+k,b+k) 最小 , (b + k) 取第一个的大于b的w的倍数
b + k=floor (b / w +1) × \times × w
验证gcd( b + k,w )是否为w
每当发现更小的 lcm(a + k,b +k) 时
更新 k 与 lcm( a +k, b + k)

posted @ 2022-07-14 16:53  Nogtade  阅读(3)  评论(0编辑  收藏  举报  来源