Ai+Bj+Ck=X

G - Ai + Bj + Ck = X (1 <= i, j, k <= N)

考虑 n 的范围,枚举 i

于是就转换成求解 Bj+Ck=XAi

这是一个扩展欧几里得的典型应用,可以求 Bj+Ck=gcd(B,C) 的一组解。而且左边的式子始终一样,所以只需求解一遍。

首先判断右边是否是 gcd 的倍数,如果是的话就就将解扩大 (XAi)÷gcd

根据 ax+by=gcd(a,b) 的所有解的公式:

x=x0kbd,y=y0+kadk 为负亦可,下面将左边的当作加,右边的当作减)。

将最小的 x 对应的解求出。

然后再根据上面的 x 变成最小的在范围内的数,然后若 y 也在范围内,那么计算二者每次递增、递减超出边界的最少次数即可。

注意取模,防止爆 long long

AC

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17645601.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(60)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起