解线性同余方程组-模板

Posted weeping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解线性同余方程组-模板相关的知识,希望对你有一定的参考价值。

 1 int n;
 2 LL a[K],b[K];
 3 LL gcd(LL a,LL b)
 4 {
 5     return b==0?a:gcd(b,a%b);
 6 }
 7 void exgcd(LL a,LL b,LL &d,LL &x,LL &y)
 8 {
 9     if(b==0)
10     {
11         x=1;y=0;d=a;
12         return;
13     }
14     exgcd(b,a%b,d,y,x);
15     y-=x*(a/b);
16 }
17 LL slove(void)//x=b[i](mod a[i])
18 {
19     LL ta=a[0],tb=b[0];
20     bool flag=true;
21     for(int i=1;i<n;i++)
22     {
23         LL xa=ta,xb=a[i],c=b[i]-tb,d,x,y;
24         exgcd(xa,xb,d,x,y);
25         if(c%d)
26         {
27             flag=false;break;
28         }
29         LL tm=xb/d;
30         x=(x*(c/d)%tm+tm)%tm;
31         tb=ta*x+tb;
32         ta=ta/d*a[i];
33     }
34     if(!flag)
35         return -1;
36     return tb;
37 }

解出的是最小正整数解

以上是关于解线性同余方程组-模板的主要内容,如果未能解决你的问题,请参考以下文章

线性不定方程与线性同余方程

HDU-1573-X问题(线性同余方程组)

线性同余方程组

『线性同余方程和中国剩余定理』

POJ 2065 SETI 高斯消元解线性同余方程

线性同余同余方程组解法(excrt)