中国剩余定理模板

 1 /*
 2 同余方程组 :
 3 设正整数m1.m2.mk两两互素,则方程组
 4 x ≡ a1 (mod m1)
 5 x ≡ a2 (mod m2)
 6 x ≡ a3 (mod m3)
 7 .
 8 .
 9 x ≡ ak (mod mk)
10 有整数解,
11 解为  x ≡ (a1 * M1 * 1/M1 + a2 * M2 * 1/M2 + a3 * M3 * 1/M3 + …… +ak * Mk * 1/Mk) mod M
12 其中 M = M1 * M2 * M3 * …… * Mk, Mi为M/mi, 1/Mi为Mi的逆元
13 */
14
15 void exgcd(int a, int b, int &x, int &y)
16 {
17     if(b == 0) {
18         x = 1;
19         y = 0;
20         return a;
21     }
22     exgcd(b, a % b, x, y);
23     int t = x;
24     x = y;
25     y = t - a / b * y;
26     return r;
27 }
28
29 LL CRT(int m[], int a[], int n)  // m 是 mod 的数, a 是余数, n 是方程组组数
30 {
31     LL M = 1, ans = 0;
32     for(int i = 0; i < n; i++)
33         M *= m[i];
34     for(int i = 0; i < n; i++) {
35         int x, y;
36         LL Mi = M / m[i];
37         exgcd(Mi, m[i], x, y); //求出的 x 即 Mi 的逆元
38         ans = (ans + Mi * a[i] * x % M + M) % M;
39     }
40     return ans;
41 }
时间: 2024-12-08 17:55:26

中国剩余定理模板的相关文章

中国剩余定理模板&amp;俄罗斯乘法

void ex_gcd(ll a,ll b,ll &d,ll &x,ll &y){ if(!b){d=a;x=1LL;y=0LL;} else {ex_gcd(b,a%b,d,y,x);y-=x*(a/b);} }/////大数乘法取模转换成加法取模,避免爆long long ll mult(ll a,ll k,ll m){ ll res=0; while(k){ if(k&1LL)res=(res+a)%m; k>>=1; a=(a<<1)%m;

中国剩余定理模板poj1006

#include <cstdio> #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> using namespace std; typedef long long ll; const int maxn = 20; ll exgcd(ll a, ll b, ll &x, ll &y

poj 1006(中国剩余定理+模板题)

题意:人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出三个日期,分别对应于体力,情感,智力出现峰值的日期.然后再给出一个起始日期,要求从这一天开始,算出最少再过多少天后三个峰值同时出现. 设第x天同时出现,则x%23=p%23,x%28=i%28...(等于p,i也是可以的,计算中会mod),然后用x-d即可,因为x可能小于d,所以加上23*28*33再对

poj 2981 Strange Way to Express Integers (中国剩余定理不互质)

http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 11970   Accepted: 3788 Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express no

hdu X问题 (中国剩余定理不互质)

http://acm.hdu.edu.cn/showproblem.php?pid=1573 X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4439    Accepted Submission(s): 1435 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0],

中国剩余定理 POJ 1006 Biorhythms

题目传送门 题意:POJ有中文题面 分析:其实就是求一次同余方程组:(n+d)=p(%23), (n+d)=e(%28), (n+d)=i(%33),套用中国剩余定理模板 代码: /************************************************ * Author :Running_Time * Created Time :2015/9/15 星期二 16:53:01 * File Name :POJ_1006.cpp **********************

POJ 2891 中国剩余定理(不互素)

Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 17877   Accepted: 6021 Description Elina is reading a book written by Rujia Liu, which introduces a strange way to express non-negative integers. The way is

Biorhythms HDU - 1370 (中国剩余定理)

题目链接:https://cn.vjudge.net/problem/HDU-1370 题目大意:给你三个式子,让你求出满足题目条件的解. (n-d)%23=p,(n-d)%28=e,(n-d)%33=i.给你d,p,e,i,让你求出n的值,其实把(n-d)看成一个整体,求出来之后再减去d就能求出n了. 中国剩余定理模板也存一下. m数组是被除数,下标从0开始 m[0]=23,m[1]=28,m[2]=33. b数组是等号右边的数,下标从0开始,b[0]=p,b[1]=e,b[2]=i. 然后求

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

线性同余方程 定义 给定整数\(a,b,m\),对于形如\(ax\equiv b(mod\ m)\)的同余方程我们称之为一次同余方程,即线性同余方程. 解线性同余方程 对于此类方程,我们可以用如下方法快速的求解. \[ ax\equiv b(mod\ m)?m|ax-b \] 不妨设\(-ym=ax-b\),则可以将方程改写为\(ax+my=b\),该不定方程可以使用扩展欧几里得算法快速地求解(详见『扩展欧几里得算法 Extended Euclid』). 对于\(gcd(a,m)\not |b\