解同餘式ax ≡ c(mod m)

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   io   

 

將式子變形為

ax-c=my

可以看出原式有解若且唯若線性方程ax-my=c有解

設g = gcd(a, m)

則所有形如ax-my的數都是g的倍數

因此如果g不整除c則原方程無解。

 

下面假設g整除c:

利用擴充歐幾裡得演算法解出 au + mv =g 一個特解(u0, v0)

所以可用整數c/g乘上上式

au0*(c/g) + mv0*(c/g) = c

得到原式的解x0 = u0*(c/g)

 

解的個數:

假設x1是ax ≡ c(mod m)的其他解

ax1 ≡ ax2(mod m),所以m整除ax1 - ax2

所以(m/g)整除(a/g)(x1-x2)

因為(m/g)與(a/g)互質,所以(m/g)整除(x1-x2)

原方程的通解為x = x0 + k*(m/g)    (k = 0, 1, 2, …… g-1)

共g個

 1 void solve(int a, int c, int m) 2 { 3     int u0, v0; 4     int g = ex_gcd(a, m, u0, v0); 5     if(c%g != 0) 6     { 7         printf("The equation has no solution!\n"); 8         return; 9     }10     int i, x;11     for(i=0; i<g; ++i)12     {13         x = c/g*u0 + m/g*i;14         x = x % m;15         if(x<0)16             x+=m;17         printf("%d\n", x);18     }19 }
代碼君
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.