poj 2115 扩展欧几里德】的更多相关文章

#include<stdio.h> #include<string.h> #define max 32 typedef long long LL; LL pow2[max+]; void init(){ ;i<=max;i++){ pow2[i]=1LL<<i; } } LL a,b,c,k; void gcd(LL a,LL b,LL& d,LL& x,LL& y){ if(!b){ d=a; x=; y=; return; } gcd(…
这个题乍一看跟剩余定理似的,但是它不满足两两互素的条件,所以不能用剩余定理,也是给了一组同余方程,找出一个X满足这些方程,如果找不到的话就输出-1 因为它不满足互素的条件,所以两个两个的合并,最后合成一个. 题目给定的是 M % m1 = r1 M % m2 = r2 ...... M % mn = rn 只需将两个式子合并成一个式子,那么这个合并的这个式子就可以继续和下面的式子继续合并,知道合到最后一个式子. 首先来看下两个式子怎么合并. M % m1 = r1    可以写成  M = k1…
题目链接:http://poj.org/problem?id=2115 题意: 给出一段循环程序,循环体变量初始值为 a,结束不等于 b ,步长为 c,看要循环多少次,其中运算限制在 k位:死循环输出FOREVER 那么这里就是: (b-a)%gcd(c,n)==0,有解:否则无解. 有解的时候,有多少解呢? 求出来的解是: 这里就是: x * (b-a) / gcd(c,n) 其中最小的解又是多少呢? 定理: 令 t = n / d; 最小的解是:(x%t+t)%t; #include <cs…
摘要写在一瞪眼. #include<iostream> using namespace std; long long exgcd(long long a,long long b,long long &k,long long &t) { if (b==0) { k=1; t=0; return a; } else { long long tp_gcd; tp_gcd=exgcd(b,a%b,k,t); long long temp; temp=k; k=t; t=temp-(a/…
//#pragma comment(linker, "/STACK:1024000000,1024000000") //#pragma GCC optimize(2) #include <algorithm> #include <iostream> #include<sstream> #include<iterator> #include<cstring> #include<string> #include<…
寒假做的题了,先贴那时写的代码. POJ 1061 #include<iostream> #include<cstdio> typedef long long LL; using namespace std; void extend_gcd(LL a,LL b,LL &d,LL &x,LL &y) { ) { d=a; x=,y=; } else { extend_gcd(b,a%b,d,y,x); y-=x*(a/b); } } int main() {…
C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23616   Accepted: 6517 Description 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 w…
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-…
欧几里德的是来求最大公约数的,扩展欧几里德,基于欧几里德实现了一种扩展,是用来在已知a, b求解一组x,y使得ax+by = Gcd(a, b) =d(解一定存在,根据数论中的相关定理,证明是用裴蜀定理),关于欧几里德的证明请看上篇. 基本算法:基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by. 证明:设a>b; 1. 显然当b=0,gcd(a, b) = a;此时x=1, y=0;这个就是递…
题目链接: http://poj.org/problem?id=1061 题目大意: 中文题目,题意一目了然,就是数据范围大的出奇. 解题思路: 假设两只青蛙都跳了T次,可以列出来不定方程:p*l + (n-m)*T == x - y.列出等式以后,利用扩展欧几里德计算不定方程的解.在求出整数最小解的地方卡了好久,好久. 想具体了解扩展欧几里德的用法和证明的话,可以看一下神牛的博文,我自认弱绞尽脑汁也写不来这么好,附上链接:http://www.cnblogs.com/frog112111/ar…