题意;给出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
在欧几里德几何中,n边形的内角和是(n-2)*180°。已知其中(n-1)个内角的度数,就能计算出剩下的一个未知内角的度数。请编写一个程序,来解决这个问题。
分类:
其他好文 时间:
2016-03-15 18:31:49
阅读次数:
156
有一种简单方法估计相似程度,无论有多少对应的数据(可以看做是每一个轴上的差值),将其求平方之后相加,最后取平方根。 为了避免0除,将其加1并且取倒。 总是处于0~1之间,接近与1表示越相似。 # -*- coding: UTF-8 -*- from math import sqrt a,b,c,d
分类:
其他好文 时间:
2016-03-05 13:16:50
阅读次数:
132
1.辗转相除法 辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。例如,求gcd(319,377):∵ 377÷319=1(余58)∴gcd(377,319)=gcd(319,58);∵ 319÷58=5(余29),∴ gcd(319,58)=gcd(58,29);∵ 58÷29=2
分类:
编程语言 时间:
2016-03-03 21:24:40
阅读次数:
212
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 基本算法:设a=qb+r。当中a,b。q,r都是整数。则gcd(a,b)=gcd(b,r)。即gcd(a,b)=gcd(b,a%b)。 递归代码: __int64 gcd(__int64 a,__int64 b) { return b
分类:
其他好文 时间:
2016-02-21 22:45:30
阅读次数:
249
Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子。 有的格子含有障碍物。 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离。 如果从格子A不可以走到格子B,就没有距离。 如果格子X和格子Y有公共边,并且X和Y均不含有障碍物,就可以从X
分类:
其他好文 时间:
2016-02-21 07:55:20
阅读次数:
164
为什么老是碰上 扩展欧几里德算法 ( ????? )最讨厌数论了 看来是时候学一学了 度娘百科说: 首先, ax+by = gcd(a, b) 这个公式肯定有解 (( ????? )她说根据数论中的相关定理可以证明,反正我信了) 所以 ax+by = gcd(a, b) * k 也肯定有解 (废话,
分类:
编程语言 时间:
2016-02-18 21:21:26
阅读次数:
219