POJ2115 C Looooops(线性同余方程)】的更多相关文章

线性同余方程的模板题.和青蛙的约会一样. #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…
链接: https://vjudge.net/problem/POJ-2115 题意: A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != B; variable += C) statement; I.e., a loop which starts by setting variable to value A and while variable i…
无符号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,…
题目: 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 化简得…
分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转化一下形式. 上式可以用同余方程表示为  a + k*c = (b) % (1<<d)   <-->  k*c = (b-a) % (1<<d)(中间应该是全等号,打不出来…).这就是我们想要的同余方程,根据我的个人习惯,我把它转化为线性方程的形式. -->   c*…
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-…
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)…
线性同余方程$ 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)+(…
poj2115 C Looooops 题意: 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束. 若在有限次内结束,则输出循环次数. 否则输出死循环. (k位==mod $2^{k}$) 列出方程:$A+Cx\equiv B(mode\quad 2^{k})$ 转换一下:$Cx+ky=B-A$ 用exgcd解出 $Cx+ky=gcd(C,k)$ 然后把求出的$x*(B-A)/gcd(C,k)$ 再$\% (k/gcd(C,k))$求个最小正整数解…
定理:对于任意整数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)…