数论之中国剩余定理

中国剩余定理是中国古代求解一次同余式组(见同余)的方法,是数论中一个重要定理,又称孙子定理。

孙子定理

  孙子定理主要用来求解模线性不定方程组。

  对于方程组:

         x0≡a0(mod b0)

       x1≡a1(mod b1)

       x2≡a2(mod b2) 

       .  .  .

       xn≡an(mod bn)

  设m=b0*b1*b2*...*bn,mi=m/bi

  得到方程组

      mixi+biyi=1

  扩欧求解后,原模线性方程组的解为:

      ∑mi*ai*xi  mod m

看代码吧:

 1 #include <cstdio>
 2 using namespace std;
 3 const int MAXN=10050;
 4 int n;
 5 int a[MAXN],b[MAXN];
 6
 7 void exgcd(long long a,long long b,long long &x,long long &y)
 8 {
 9     if(a%b==0)
10     {
11         x=0;y=1;return ;
12     }
13     exgcd(b,a%b,x,y);
14     long long t=x;
15     x=y;y=t-a/b*y;
16 }
17
18 long long China_Reminder(int n)
19 {
20     long long m=1,mi,res=0,x,y;
21     for(int i=1;i<=n;i++)m*=b[i];
22     for(int i=1;i<=n;i++)
23     {
24         mi=m/b[i];
25         exgcd(mi,b[i],x,y);
26         x=(x%b[i]+b[i])%b[i];
27         res=(res+mi*a[i]*x%m)%m;
28     }
29     return (res+m)%m;
30 }
31
32 int main()
33 {
34     scanf("%d",&n);
35     for(int i=1;i<=n;i++)scanf("%d %d",&a[i],&b[i]);
36     printf("%lld\n",China_Reminder(n));
37     return 0;
38 }

例题:fzu1402 猪的安家

原文地址:https://www.cnblogs.com/lzxzy-blog/p/10311968.html

时间: 2024-08-02 22:02:00

数论之中国剩余定理的相关文章

【数学】【数论】中国剩余定理

写在前面 记录了个人的学习过程,同时方便复习 中国剩余定理 [物不知数]是中国古代著名算题 原载<孙子算经>卷下第二十六题: "今有物不知其数,三三数之剩二:五五数之剩三:七七数之剩二.问物几何?" 当时虽已有了答案23,但它的系统解法是秦九韶在<数书九章·大衍求一术>中给出的 中国剩余定理是中国古算中最有独创性的成就之一,属现代数论中的一次同余式组问题 --bia度百科 有x个物件,三个三个数剩2个,五个五个位数剩3个,七个七个数剩2个 那么就是求解以下同余方

【数论】中国剩余定理

问题:给定a1a2...an, 和m1,m2...mn,mi之间两两互质,求一个x,使得x/ai=mi 构造方法: 先求出M=∏ni=1mi, 对于每个mi,求出M / mi, 然后和mi利用拓展欧几里得算法求出M/mi?p+mi?q=1时的值,取∑ni=1(p?ai?M/mi)就是答案. 证明: 证明参考了wiki 由于mi之间两两互质,所以gcd(mi,mj)=1,gcd(mi,Mi)=1, 求出数论倒数ti使得Mi?ti%mi=1,这就是上面利用扩展欧几里得算法求出的p值,ai?p?M%m

[数论]拓展中国剩余定理

拓展中国剩余定理 •拓展中国剩余定理 拓展中国剩余定理是用来解同余方程 $\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2}\left( mod\ m_{2}\right) \\ \ldots \\ x\equiv c_n\left( mod\ m_n\right) \end{cases}$ ps.如果m1,m2,m3...mn两两互素的话,可以用中国剩余定理来求 假设 $x\equiv c_{1} (mod \

数论E - Biorhythms(中国剩余定理,一水)

E - Biorhythms Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the

acm数论之旅--中国剩余定理

中国剩余定理,又名孙子定理o(*≧▽≦)ツ 能求解什么问题呢? 问题: 一堆物品 3个3个分剩2个 5个5个分剩3个 7个7个分剩2个 问这个物品有多少个 解这题,我们需要构造一个答案 我们需要构造这个答案 5*7*inv(5*7,  3) % 3  =  1 3*7*inv(3*7,  5) % 5  =  1 3*5*inv(3*5,  7) % 7  =  1 这3个式子对不对,别告诉我逆元你忘了(*′?`*),忘了的人请翻阅前几章复习 然后两边同乘你需要的数 2 * 5*7*inv(5*

数论总结之 中国剩余定理

背景 我!终于学会孙子定理了!!!!!!!!!!!!!!!!!!!!!!!!!!! 好难啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! QAQ 中国剩余定理 中国剩余定理又名孙子定理. 在了解中国剩余定理之前,我先放出之前终止了我很长时间的懵逼的一段话. 中国剩余定理介绍 在<孙子算经>中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为

同余 模算术 中国剩余定理

相关知识点: 1.a≡b(modc),a,b关于模c同余  ,即a modc=b mod c , 等价于a%c=b 2.如果a,b互质(a,b)=1,则可得a关于模b的逆 ax≡1(modb) 3.关于余数的定理: 定理1 :如果被除数加上(或减去)除数的整数倍,除数不变,则余数不变. 定理2 :如果被除数扩大(或缩小)几倍,除数不变,则余数也扩大(或缩小)同样的倍数. 定理3: 如果整数a除以自然数b(b≠0),余数r仍不小于b,则r除以b的余数等于a除以b所得余数.(余数和被除数关于除数同余

hihocode 九十七周 中国剩余定理

题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军韩信带领1500名士兵经历了一场战斗,战死四百余人.韩信为了清点人数让士兵站成三人一排,多出来两人:站成五人一排,多出来四人:站成七人一排,多出来六人.韩信立刻就知道了剩余人数为1049人. 小Hi:韩信点兵嘛,这个故事很有名的. 小Ho:我觉得这里面一定有什么巧妙的计算方法!不然韩信不可能这么快计

gcd,扩展欧几里得,中国剩余定理

1.gcd: int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } 2.中国剩余定理: 题目:学生A依次给n个整数a[],学生B相应给n个正整数m[]且两两互素,老师提出问题:有一正整数ans,对于每一对数,都有:(ans-a[i])mod m[i]=0.求此数最小为多少. 输入样例: 1 10 2 3 1 2 3 2 3 5 8 1 2 3 4 5 6 7 8 97 89 67 61 59 53 47 88 12 1 2 3 4 5 6 7 8 9