一、拓展欧几里得算法 该算法用来解决这样一个问题:给定两个非零整数 a 和 b,求一组整数解 (x,y) ,使得 ax + by = gcd(a,b) 成立,其中 gcd(a,b) 表示 a 和 b 的最大公约数。 递归边界:当 b 为 0 时,此时的 a 就等于 gcd,显然有 a*1+b*0=g ...
分类:
编程语言 时间:
2018-01-20 16:34:05
阅读次数:
140
#include<bits/stdc++.h>using namespace std;typedef long long LL; void exgcd(int a,int b,LL &x,LL &y){ if(b==0){x=1, y=0; return;} LL tx,ty; exgcd(b,a% ...
分类:
其他好文 时间:
2017-07-20 20:55:42
阅读次数:
169
拓展欧几里得算法,由欧几里得算法(辗转相除法)得来。 先介绍欧几里得算法: 求两个数的最大公约数,根据简单的证明(就不证了)可得: gcd(a,b)==gcd(b,a%b); 所以可以写出代码: 接下来是拓展欧几里得算法: 首先我们需要知道gcd(a,b)==gcd(b,a%b)==gcd(b,a- ...
分类:
其他好文 时间:
2017-07-16 20:47:40
阅读次数:
201
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。 递归版算法: 递归优化版: 迭代版: 扩展欧几里德算法 基本算法:对于不完全为 0 的非负整数 a ...
分类:
编程语言 时间:
2017-07-16 00:49:26
阅读次数:
353
欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法。用于计算两个正整数a。b的最大公约数。 ——百度百科 代码: 递推的代码是相当的简洁: int gcd(int a,int b) { return b == 0 ...
分类:
编程语言 时间:
2017-07-03 16:14:02
阅读次数:
173
http://www.lydsy.com/JudgeOnline/problem.php?id=4869 终于A了。。。参考了下dalao的代码。。。 拓展欧几里得定理,改了几次就不变了,但是用的时候要在快速幂里判是不是要用。 #include<bits/stdc++.h> using namesp ...
分类:
其他好文 时间:
2017-05-09 21:47:32
阅读次数:
169
数论拓展欧几里得,计算mx+ny=d的一组解(m。n为已知) int xx=x+n/d*i; int yy=y-m/d*i;//xx,yy分别为其它通解 void extend_gcd(int a,int b,int &x,int &y,int &d) { if(!b) { x=1; y=0; d= ...
分类:
其他好文 时间:
2017-05-05 16:19:37
阅读次数:
134
题目: Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一 ...
分类:
编程语言 时间:
2017-04-03 23:48:38
阅读次数:
236
算法描述就是: 求整数 x和y 使得 ax + by = 1. 可以发现, 如果gcd(a, b) ≠ 1,则显然无解. 反之, 如果gcd(a, b) = 1, 则可以通过拓展原来的 辗转相除法 来求解. 事实上,一定存在整数对(x, y)使得ax+by = gcd(a,b) 代码如下: ...
分类:
编程语言 时间:
2017-04-03 18:53:23
阅读次数:
164