AcWing 1299. 五指山
原题链接
简单
作者:
辰风
,
2020-02-20 10:41:21
,
所有人可见
,
阅读 889
分析
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL exgcd(LL a, LL b, LL &x, LL &y)//求出ax+by在等于最大公约数时候的系数x,y
{
if (!b)
{
x = 1, y = 0;
return a;
}
LL d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
int main()
{
int T;
scanf("%d", &T);
while (T -- )
{
LL n, d, x, y, a, b;
scanf("%lld%lld%lld%lld", &n, &d, &x, &y);
int gcd = exgcd(n, d, a, b);
if ((y - x) % gcd) puts("Impossible");
else
{
b *= (y - x) / gcd;
n /= gcd;
printf("%lld\n", (b % n + n) % n);
}
}
return 0;
}
请问一下为什么x解的集合可以表示为 x₀+k*n/gcd(n,d);