线性同余方程模板( A+C*x=B(mod D) )】的更多相关文章

void extendgcd(long long a,long long b,long long &d,long long &x,long long &y) { ){d=a;x=;y=;return;} extendgcd(b,a%b,d,y,x); y -= x*(a/b); } //求解A+C*x=B(mod D),返回最小非负整数x long long ModX(long long A,long long B,long long C,long long D) { if(A==…
先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/6804137.html) 定理2: 一元线性同余方程ax ≡ n (mod b) 有解,当且仅当gcd(a,b)|n. 也就是说,解出了ax+by=gcd(a,b),就相当于解出了ax≡n(mod b) (而且只要满足gcd(a,b)|n,就一定有解) 定理3: 若gcd(a,b) = 1,则方程ax…
求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 输入格式输入只有一行,包含两个正整数a,b,用一个空格隔开. 输出格式输出只有一行,包含一个正整数x,表示最小正整数解. 输入数据保证一定有解. 数据范围2≤a,b≤2∗109输入样例:3 10输出样例:7 题意:要求满足题给的式子的最小正整数x 思路:线性同余方程的经典问题 ax ≡ m(mod b)  (原型) ax ≡ 1(mod b)   ->    ax - by = 1(因为%b就相当于ax减掉若干个b) 说明只有gc…
线性同余方程的模板题.和青蛙的约会一样. #include <cstdio> #include <cstring> #define LL long long using namespace std; //A+n*C = B mod 2^k //n*C = B-A mod 2^k LL A,B,C,MOD; int k; LL ExGCD(LL a,LL b,LL &x,LL &y) { LL d,t; ) { x=;y=; return a; } d = ExGCD…
/************************************* ---高次同余方程模板BabyStep-GiantStep--- 输入:对于方程A^x=B(mod C),调用BabyStep(A,B,C),(0<=A,B,C<=10^9) 输出:无解放回-1,有解放回最小非负整数x 复杂度:O(C^0.5),只与C有关,与A,B的大小无关 ************************************/ typedef long long ll; #define HAS…
刚看到这个题目,有点被吓到,毕竟自己这么弱. 分析了很久,然后发现m,k都可以唯一的用d进制表示.也就是用一个ai,和很多个bi唯一构成. 这点就是解题的关键了. 之后可以发现每次调用函数f(x),相当于a(ai),b(bi)了一下.这样根据置换的一定知识,一定会出现循环,而把循环的大小看成取模,把从m->k的看成余,于是可以建立一个线性同余方程. 直接用模板解决之.. Recurrent Function Time Limit: 1000MS   Memory Limit: 65536K To…
先记录一下一些概念和定理 同余:给定整数a,b,c,若用c不停的去除a和b最终所得余数一样,则称a和b对模c同余,记做a≡b (mod c),同余满足自反性,对称性,传递性 定理1: 若a≡b (mod c),对某个整数k有 a+k≡b+k (mod c) a-k≡b-k (mod c)  ak≡bk (mod c)  定理2: 若a≡b (mod c),d≡e (mod c),有 ax+dy≡bx+ey (mod c) ,x,y为任意整数,即同余式可以相加 ad≡be (mod c) ,即同余…
无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程: $$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} $$ 最后就用扩展欧几里得算法求出这个线性同余方程的最小非负整数解. #include<cstdio> #include<cstring> #define mod(x,y) (((x)%(y)+(y))%(y)) #define ll long long ll exgcd(ll a,…
线性同余方程$ ax \equiv b \pmod n$可以用扩展欧几里得算法求解. 这一题假设青蛙们跳t次后相遇,则可列方程: $$ Mt+X \equiv Nt+Y \pmod L$$ $$ (M-N)t \equiv Y-X \pmod L$$ 于是就构造出一个线性同余方程,即可对t求解,解出最小非负整数解. #include<cstdio> #include<cstring> using namespace std; #define mod(x,y) (((x)%(y)+(…
分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转化一下形式. 上式可以用同余方程表示为  a + k*c = (b) % (1<<d)   <-->  k*c = (b-a) % (1<<d)(中间应该是全等号,打不出来…).这就是我们想要的同余方程,根据我的个人习惯,我把它转化为线性方程的形式. -->   c*…
定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b) int exgcd(int a,int b,int &x,int &y){ ){x=,y=;return a;} int d=exgcd(b,a%b,x,y); int z=x;x=y;y=z-y*(a/b); return d; } 当d可以整除c时,一般方程ax+by=c的一组特解求法: 1.求ax+by=d的特解x0,y0 2.ax+by=c的特解为(c/d)x0,(c/d)y0 上述方程的通解:(c/d)…
题目: http://poj.org/problem?id=2115 要求: 会求最优解,会求这d个解,即(x+(i-1)*b/d)modm;(看最后那个博客的链接地址) 前两天用二元一次线性方程解过,万变不离其宗都是利用扩展欧几里得来接最优解. 分析: 数论了解的还不算太多,解的时候,碰到了不小的麻烦. 设答案为x,n = (1<<k), 则 (A+C*x) % n == B 即 (A+C*x) ≡ B (mod n)//-----结果显而易见两边的(a+cx)%n==b<n 化简得…
青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 105587   Accepted: 20789 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总…
d.对于这个循环, for (variable = A; variable != B; variable += C) statement; 给出A,B,C,求在k位存储系统下的循环次数. 例如k=4时,变量variable则只在0~15之间循环变化. s.扩展欧几里德求解模线性方程(线性同余方程). 设循环次数为x, 1.(A+C*x)mod 2^k=B. --> C*x=B-A(mod 2^k). (怎么变来的?) 2.C*x=B-A(mod 2^k). --> C*x+(2^k)*y=B-…
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1573 题目大意: 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mod a[i] = b[i], - (0 < a[i] <= 10). 思路: 先求出数组b[]中全部数的最小公倍数lcm,再求解出该一元线性同余方程组在lcm范围内的解为a.题目要 求解x是小于等于N的正整数,…
题意 题解 做了这道题,发现扩欧快忘了. 根据题意可以很快地列出线性同余方程. 设跳了k次 x+mkΞy+nk(mod l) (m-n)kΞ-(x-y)(mod l) 然后化一下 (m-n)k+(x-y)Ξ0(mod l) 也就是前面一坨是l的倍数 不妨设 (m-n)k+(x-y)=-tl (m-n)k+tl=-(x-y) 我们要求的就是保证t<=0(因为我们设的-t倍的l,所以t<=0),k>=0时k的最小值 发现这是一个不定方程 根据裴蜀定理(这个定理搜狗输入法上没有) 当-(x-y…
题目链接: http://codeforces.com/problemset/problem/710/D 分析:给你两个方程 a1k + b1 and a2l + b2,求在一个闭区间[L,R]中有多少个X,X满足 x = a1k' + b1 = a2l' + b2. 由此可以发现这两个方程满足线性同余,即 x ≡b1mod(a1) 且 x≡b2mod(a2); 也就是 a1k' + b1 = a2l' + b2a. 所以 a1k1 + (-a2k2) = (b2 - b1),由同余方程得 :…
给定2n个整数a1,a2,…,ana1,a2,…,an和m1,m2,…,mnm1,m2,…,mn,求一个最小的整数x,满足∀i∈[1,n],x≡mi(mod ai)∀i∈[1,n],x≡mi(mod ai). 输入格式 第1行包含整数n. 第2..n行:每i+1行包含两个整数aiai和mimi,数之间用空格隔开. 输出格式 输出整数x,如果x不存在,则输出-1. 数据范围 1≤ai≤231−11≤ai≤231−1,0≤mi<ai0≤mi<ai 输入样例: 2 8 7 11 9 输出样例:31…
我们接着上面的欧几里得算法说 扩展欧几里得算法 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式\(^①\): ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理).扩展欧几里德常用在求解模线性方程及方程组中. ①:裴蜀定理: 裴蜀定理\((Bezouts identity)\)是代数几何中一个定理,其内容是若设a,b是整数,则存在整数x,y,使得ax+by=gcd(a,b),(a,b)代表最大公因数,则设a,b是不全为零的整数,则存在整数x,y,使…
题意:有围着一圈的\(N\)把椅子,其中有一个是冠位,你在离冠位顺时针\(S\)把椅子的位置,你每次可以顺时针走\(K\)个椅子,问最少要走多少次才能登上冠位,或者走不到冠位. 题解:这题和洛谷那个青蛙的约会简直一模一样啊,我们可以把圆看成是一条直线,我每次都向前都\(k\)步,多出\(N\)的部分我们可以对\(N\)取模,直到走到目标点.假设我们要走\(x\)次,那么\(Kx\equiv\ (N-S)\ mod\ N\),接下来就是线性同余方程求最小正整数解的板子了,关于线性同余方程的求解可以…
我们先放题面-- RT就是求一个线性同余方程ax≡1(mod b)的最小正整数解 我们可以将这个同于方程转换成这个方程比较好理解 ax=1+bn(n为整数 我们再进行一个移项变为ax-bn=1 我们设-n为y 那么这个方程就变成了ax+by=1这一个不定方程 我们可以完全可以先解出这一个方程的一个特解x0,y0(解法下面讲) 因为我们求解出的特解有可能会大于我们最后的答案也有可能小于我们最后的答案(为负数) 这个时候我们需要一个性质-- 若gcd(a, b) = d,则方程ax ≡ c (mod…
note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念: 形如:(a1*x1+a2*x2+....+an*xn)%m=b%m           ..................(1) 当然也有很多变形,例如:a1*x1+a2*x2+...+an*xn+m*x(n+1)=b.这两个都是等价的. 判断是否有解: 解线性同余方程,我们首先要来判断方程是否有解,方程有解的充要条件是:d%b==0.其中d=gcd(a1,a2,...an)…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lcm(a1,a2,a3,...an). 别的就没什么注意的了. #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h&…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题目解析;HDU就是坑,就是因为n,m定义成了__int64就WAY,改成int就A了,无语. 这题就是求解一元线性同余方程组的解满组小于正整数n的数目.最小正整数的解为X=(X*(c/d)%t+t)%t;  X=a1*X+r1;其中X为扩展欧几里得解出来的特解,这m个方程组的循环区间为lcm(a1,a2,a3...am),所以答案为(n-X)/lcm+1; #include <iostream>…
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <stdlib.h> using namespace std; #define N 10100 /*对于x=r0(mod m0) x=r1(mod m1) ... x=rn(mod mn) 输入数组m和数组r,返回[0,[m0,m1,...,mn]-1] 范围内满足以上等…
Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 258 Accepted Submission(s): 111   Problem Description One day I was shopping in the supermarket. There was a cashier counting coins serio…
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=84 Time Limit:1000ms Memory Limit:65536K Description 西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:“我与你打个赌赛:你若有本事,一筋斗打出我这右手掌中,算你赢,再不用动刀兵苦争战,就请玉帝到西方居住,把天宫让你:若不能打出手掌,你还下界为妖,再修几劫,却来争吵.” 那大圣闻言,暗笑道:“这如来十分好呆!我老…
X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5974    Accepted Submission(s): 2053 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod…
套模板,因为要是正整数,所以处理一下x=0的情况. X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4444    Accepted Submission(s): 1439 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X…
一个exgcd解决一个线性同余问题,多个exgcd解决线性同余方程组. Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 12001   Accepted: 3797 Description Elina is reading a book written by Rujia Liu, which introduces a strange way to expre…