两个互质整数的线性组合问题
本文我们讨论两个互质整数的线性组合问题,以及相关的二元一次不定方程。
两个互质整数的线性组合
已知两个整数 a a a和 b b b互质,即 gcd ( a , b ) = 1 \gcd(a,b)=1 gcd(a,b)=1,那么对于任意两个非负整数 x , y x,y x,y来说,线性组合 a x + b y ax+by ax+by,能表示的整数数是多少,不能表示的整数又是多少,最大是多少,以及不能表示的整数的个数是多少呢?
能表示整数的下界
设能表示的数为 K K K,则有 a x + b y = K ax+by=K ax+by=K,对两边同时取 b b b的模,则 a x m o d b = K m o d b ax \mod b=K \mod b axmodb=Kmodb,即为线性同余方程 a x ≡ K m o d b ax \equiv K \mod b ax≡Kmodb。又因为 gcd ( a , b ) = 1 \gcd(a,b) = 1 gcd(a,b)=1,因此该线性同余方程一定有解,且有一个解,但是这个解必须满足实际,即 x ≥ 0 , y ≥ 0 x \geq 0,y \geq 0 x≥0,y≥0。
题目中说凑不出来一个数 K K K,说明 a x + b y = K ax+by=K ax+by=K,中 x ≥ 0 , y < 0 x \geq 0,y \lt 0 x≥0,y<0。 x x x的解空间为 [ 0 , b − 1 ] [0,b-1] [0,b−1]因此当 x = b − 1 x=b-1 x=b−1时,令 c = a ( b − 1 ) m o d b c = a(b-1) \mod b c=a(b−1)modb,那么 K K K等于序列 c + i b , i ∈ Z c+ib,i \in Z c+ib,i∈Z,并且 K K K应该小于 a ( b − 1 ) a(b-1) a(b−1),这样才能令 y < 0 y \lt 0 y<0,因此我们就解不等式 c + i b < a ( b − 1 ) c+ib \lt a(b-1) c+ib<a(b−1),取最大的 i ′ i' i′,那么 c + i ′ b c+i'b c+i′b就是我们想要的答案了。
不妨设 a < b a \lt b a<b,那么 c = b − a c = b-a c=b−a,因此, i ′ = a ( b − 1 ) − c b − 1 i' = \frac{a(b-1) -c}{b} - 1 i′=ba(b−1)−c−1。因此 i ′ = a − 2 i' = a-2 i′=a−2,带入算式 c + i ′ b c+i'b c+i′b,结果 b − a + b ( a − 1 ) = a b − a − b b-a+b(a-1)= ab-a-b b−a+b(a−1)=ab−a−b。
因此,一个严格的下界(最小能表示)就是 a b − a − b + 1 ab-a-b+1 ab−a−b+1。
而 l c m ( a , b ) lcm(a,b) lcm(a,b)是一个最小公倍数下界, a b − a ab-a ab−a或 a b − b ab-b ab−b称为不严格下界。
不能表示整数的个数
根据上面的思路,我们设 x = b − n x=b-n x=b−n, n ∈ [ 1 , b ] n \in[1,b] n∈[1,b],则 c = a ( b − n ) m o d b = b − a n + ⌊ a n b ⌋ b c = a(b-n) \mod b=b-an+\lfloor \frac{an}{b} \rfloor b c=a(b−n)modb=b−an+⌊ban⌋b,让不等式 c + i b < a ( b − n ) c+ib \lt a(b-n) c+ib<a(b−n)有解, i i i至少为 0 0 0,因此 c < a ( b − n ) c \lt a(b-n) c<a(b−n),化简得到 ⌊ a n b ⌋ < a − 1 \lfloor \frac{an}{b} \rfloor \lt a-1 ⌊ban⌋<a−1,因为 a < b a \lt b a<b,因此 n < b − 1 n \lt b-1 n<b−1,因此 n ∈ [ 1 , b − 2 ] n \in [1,b-2] n∈[1,b−2]。
接下来,找到最大的 i ′ i' i′,解得 i ′ = a − ⌊ a n b ⌋ − 2 i' = a-\lfloor \frac{an}{b} \rfloor - 2 i′=a−⌊ban⌋−2。
因此,个数为:
∑ n = 1 b − 2 ( a − ⌊ a n b ⌋ − 1 ) = ( a − 1 ) ( b − 2 ) − ∑ n = 1 b − 2 ⌊ a n b ⌋ \sum_{n=1}^{b-2}(a-\lfloor \frac{an}{b} \rfloor - 1)=(a-1)(b-2)-\sum_{n=1}^{b-2}\lfloor \frac{an}{b} \rfloor n=1∑b−2(a−⌊ban⌋−1)=(a−1)(b−2)−n=1∑b−2⌊ban⌋
题解
int main()
{
ll a,b;
cin >> a >> b;
ll mi = min(a,b);
ll ma = max(a,b);
ll upper = ma * (mi-1);
ll base = (upper)% mi;
ll ans = 0;
if((upper - base) % mi == 0)
{
ans = (((upper - base) / mi)-1) * mi + base;
}
else
{
ans = ((upper - base) / mi) * mi + base;
}
cout << ans;
return 0;
}
由此我们可以知道数论题的第一个套路,寻找等式关系,对等式两个取模。构建同余线性方程。