欧几里得算法:也被称作辗转相除法 gcd(a,b)=gcd(b,a%b); 终止条件a=gcd b=0; (gcd为a,b的最大公约数) 扩展欧几里得算法: a 和 b 的最大公约数是 gcd ,一定能够找到这样的 x 和 y ,使得: a*x + b*y = gcd 成立 我们只需要找到特殊解x0 ...
分类:
编程语言 时间:
2017-05-23 00:33:19
阅读次数:
191
这里提供两种方法:一种比较朴素,基本思想很简单就是按照从大到小的找能够匹配的因数,找到就返回;另一种是欧几里得算法,该算法的核心思想是,当前两个数的最大公因数的也是这两个数模的与其中一个元素的的最大公因数,然后递归算出。当两个数的模等于0时,则找到了最大公因数。 第一种:朴素的算法 算法思想:基本思 ...
分类:
其他好文 时间:
2017-05-22 20:05:54
阅读次数:
205
很开拓眼界的题。。 题意:给出一个n元一次方程形如a1*x1+a2*x2...+an*xn=B,求满足解集为非负整数的B值在[L,R]范围内的种数。(n<=12,ai<=5e5,L<=R<=1e12) 如果要求解集可以为负数,那么根据扩展欧几里得即可快速得到答案。 现在的问题更像一个多重背包,但是L ...
分类:
其他好文 时间:
2017-05-22 15:02:22
阅读次数:
165
注意2^32用long long其他没坑,扩展欧几里得,,,反正我没想到 ...
分类:
其他好文 时间:
2017-05-22 11:02:44
阅读次数:
164
题目大意&&分析: 这两行用于求出最小正整数解,ax+by=c; a,b互素,则ax1+by1=ax2+by2;那么(x1-x2)一定是b的整数倍, 所以当x>0时,x%b即为所求; x<0时,x%b+b即为所求,二者综合就是(x%b+b)%b可以得出最小正整数解; ...
分类:
其他好文 时间:
2017-05-21 11:44:43
阅读次数:
123
逆元: 丢线 对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元。 逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为。 推导过程如下 求现在来看一个逆元最常见问题,求如下表达式的值(已知)(|为整除号) 当然这个经典的问题有很多方法,最常见的就是扩展 ...
分类:
其他好文 时间:
2017-05-20 22:41:20
阅读次数:
331
欧几里得gcd(a,b)=gcd(b,a%b)=...... 因为ax≡1(mod b) -》ax%b=1%b=1 所以ax+by=1,因为y是整数所以加个by就相当于%b(因为%b的本质是+上y个b),所以两个式子等价 由扩展欧几里得得 ax+by=gcd(a,b)=gcd(b,a%b)=bx+( ...
分类:
其他好文 时间:
2017-05-19 17:49:56
阅读次数:
118
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开。 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解。输入数据保证一定有解。 1 #include < bits/stdc++ ...
分类:
其他好文 时间:
2017-05-15 19:45:06
阅读次数:
125
扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。 扩展欧几里德常用在求解模线性方程及方程组中。 首先,证明一下gcd(a,b)==gcd(b,a%b) 设gcd(a,b) = ka = n1 * ...
分类:
其他好文 时间:
2017-05-13 19:11:52
阅读次数:
168
欧几里得算法就是我们常说的辗转相除法,辗转相除法可以用来求最大公约数,知道最大公约数还可以求最小公倍数。gcd在好像也有库函数__gcd int Gcd(int a, int b) { while(b != 0) { int r = b; b = a % b; a = r; } return a; ...
分类:
编程语言 时间:
2017-05-13 14:25:12
阅读次数:
210