证明略。在此只要求指导exgcd,并且会使用。 欧几里德算法:现在有a=xb+y,其中a,b,x,y为整数,那么可以得到:gcd(a,b)=gcd(b,a%b)。 代码实现: 扩展欧几里德算法: 对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在无数组整 应用 ...
分类:
其他好文 时间:
2016-03-24 16:03:12
阅读次数:
106
扩展欧几里德算法 先介绍什么叫做欧几里德算法 有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b 很大的时候,枚举显得那么的naïve ,那怎么做? 欧几里德有个十分又用的定理: gcd(a, b) = gcd(b , a%b) ,这样,我们就可以在几
分类:
编程语言 时间:
2016-03-22 22:01:34
阅读次数:
375
题意;给出N,A,B;求A*x+ B*y = N+1 的大于0 的解的数量; 思路:先用exgcd求出大于0的初始解x,rest = N - x*A; sum = rest/LCM(A, B);
分类:
其他好文 时间:
2016-03-20 14:26:34
阅读次数:
160
有时候一个函数需要返回多个结果,而C++98并不提供对它的支持,这时候有两种办法:把要返回的结果设为全局变量,或者把多出的结果作为参数按引用传递(C#的out关键字就是这个作用)。 拿扩展欧几里德算法举例吧,输入a、b,求出x,y,g,使用a*x+b*y=g且g=gcd(a,b)。两种写法如下: 第
分类:
其他好文 时间:
2016-03-20 00:27:50
阅读次数:
247
寒假做的题了,先贴那时写的代码。 POJ 1061 #include #include typedef long long LL; using namespace std; void extend_gcd(LL a,LL b,LL &d,LL &x,LL &y) { if(b==0) { d=a; ...
分类:
其他好文 时间:
2016-03-17 01:57:32
阅读次数:
201
为什么老是碰上 扩展欧几里德算法 ( ????? )最讨厌数论了 看来是时候学一学了 度娘百科说: 首先, ax+by = gcd(a, b) 这个公式肯定有解 (( ????? )她说根据数论中的相关定理可以证明,反正我信了) 所以 ax+by = gcd(a, b) * k 也肯定有解 (废话,
分类:
编程语言 时间:
2016-02-18 21:21:26
阅读次数:
219
gcd算法: 通过辗转相除求最大公约数 #include<stdio.h> int gcd(int a,int b){ return a%b==0?b:gcd(b,a%b); } int main(){ printf("%d",gcd(15,18)); return 0; } 扩展gcd算法: 对于
分类:
编程语言 时间:
2016-02-06 18:15:12
阅读次数:
193
解的个数 已知整数x,y满足如下面的条件: ax+by+c = 0 p<=x<=q r<=y<=s 求满足这些条件的x,y的个数。 输入描述 Input Description 第一行有一个整数n(n<=10),表示有n个任务。n<=10 以下有n行,每行有7个整数,分别为:a,b,c,p,q,r,
分类:
其他好文 时间:
2016-02-02 19:51:22
阅读次数:
181
为什么老是碰上 扩展欧几里德算法 ( ????? )最讨厌数论了 看来是时候学一学了 度娘百科说: 首先, ax+by = gcd(a, b) 这个公式肯定有解 (( ????? )她说根据数论中的相关定理可以证明,反正我信了) 所以 ax+by = gcd(a, b) * k 也肯定有解 (废话,
分类:
编程语言 时间:
2016-01-29 08:39:13
阅读次数:
147
五指山 description 西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:“我与你打个赌赛;你若有本事,一筋斗打出我这右手掌中,算你赢,再不用动刀兵苦争战,就请玉帝到西方居住,把天宫让你;若不能打出手掌,你还下界为妖,再修几劫,却来争吵。” 那大圣闻言,暗笑道:“这如来十分好呆!我老孙一筋斗
分类:
其他好文 时间:
2016-01-27 17:00:18
阅读次数:
146