求解同余方程

前置知识

a , b a,b a,b m m m取模的结果相同,记为 a ≡ b ( m o d   m ) a\equiv b(mod\ m) ab(mod m),即 a   m o d   m = = b   m o d   m a\ mod\ m == b\ mod\ m a mod m==b mod m

如果 a ≡ b ( m o d   m ) a\equiv b(mod\ m) ab(mod m),且 c ≡ d ( m o d   m ) c\equiv d(mod\ m) cd(mod m),则

  • a + b ≡ c + d ( m o d   m ) a + b\equiv c + d(mod\ m) a+bc+d(mod m)
  • a × b ≡ c × d ( m o d   m ) a \times b\equiv c \times d(mod\ m) a×bc×d(mod m)

同余方程

设有同余方程 a x ≡ b ( m o d   n ) ax\equiv b(mod\ n) axb(mod n)对于未知数 x x x有解,当且仅当 b b b g c d ( a , n ) gcd(a,n) gcd(a,n)的倍数。且方程有解时,方程有 g c d ( a , n ) gcd(a,n) gcd(a,n)个解

求解方程 a x ≡ b ( m o d   n ) ax\equiv b(mod\ n) axb(mod n)相当于求解方程 a x + n y = b ax+ny=b ax+ny=b x , y x,y x,y为整数)

对于上面的式子证明如下:

a x ≡ b ( m o d   n ) ax \equiv b(mod\ n) axb(mod n)
a x = n y 1 + p b = n y 2 + p ax = ny_1 + p\\ b = ny_2 + p ax=ny1+pb=ny2+p
用中文解释就是, a x ax ax等于 y 1 y_1 y1倍的 n n n加上余数 p p p;而 b b b等于 y 2 y_2 y2倍的 n n n加上余数 p p p

两式相减得 a x + n y = b ax+ny=b ax+ny=b,证毕

所以求解同余方程 a x ≡ b ( m o d   n ) ax\equiv b(mod\ n) axb(mod n)就转化为了求解裴蜀方程 a x + n y = b ax+ny=b ax+ny=b,并且 ( x , y ) (x,y) (x,y)有整数解当且仅当 b b b g c d ( a , n ) gcd(a,n) gcd(a,n)的倍数

例题POJ1061 青蛙的约会

你可能感兴趣的:(算法)