中国剩余定理+原根+扩展欧几里得 题解:http://blog.csdn.net/regina8023/article/details/44863519 新技能get√: 1 LL Get_yuangen(LL p,LL phi){ 2 int c=0; 3 for(int i=...
分类:
其他好文 时间:
2015-06-02 19:44:25
阅读次数:
148
这题的关键就是找方程:
要想青蛙能碰面,就满足方程:
(x+m*t) - (y+n*t) = p*l;
t:跳的次数
p:两只青蛙相差的圈数
l:纬度线的长度
将上述方程整理得:
(n-m)*t + p*l = x-y;
令a=n-m,b=l,c=gcd(a,b),d=x-y;
所以就有:
a*t + b*p = d;
就是求解t的最小正整数;#include <iostrea...
分类:
其他好文 时间:
2015-05-30 12:15:23
阅读次数:
110
扩展欧几里得
通解:x+B/GCD*k,y+A/GCD*k
先缩小x1,x2范围,再缩y
#include
using namespace std;
void extgcd(long long a,long long b,long long &d,long long &x,long long &y)//return d=gcd(a,b)(==a*x+b*y)
{
if(!b)
...
分类:
其他好文 时间:
2015-05-23 18:26:41
阅读次数:
105
题目大意: 对于给定的整数a,b,c,d,及整数x1,x2,y1,y2,z1,z2,求有多少个满足x1<=x<=x2,y1<=y<=y2,z1<=z<=z2且x、y、z均为整数的点在平面ax+by+cz+d=0上。如果我们枚举z,则问题变成了ax+by=c有多少个解的问题.
这就是一个扩展欧几里得的模板题了.但是有两个地方值得注意:首先我们要保证a,b,c这三个参数必须为正.然后是在利用通解公式求...
分类:
其他好文 时间:
2015-05-15 20:00:30
阅读次数:
154
证明:设 a>b。
推理1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;//推理1
推理2,a*b!=0 时
设 ax1+by1=gcd(a,b);
bx2+(a mod b)y2=gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b);
则:ax1+by1=bx2+(a mod b)y2;
即:ax1+by1=bx2+...
分类:
编程语言 时间:
2015-05-14 23:50:21
阅读次数:
177
这是我算法学习标签下的第一篇随笔,首先我想声明,在看了很多博客后,我的想法就是,尽量不去盲目复制别人的东西,一个原因是盲目复制不一定能发现其文章中的错误,二是可以加深自己的理解程度,并且将博客写得通俗易懂,转载别人的东西一定要注明出处。还有我的一个习惯就是,把东西写短一点,所以有可能会将一个本来应在...
分类:
编程语言 时间:
2015-05-14 11:34:01
阅读次数:
111
//(x + km)%l == (y + kn)%l
//s*l + k(m - n) = y - x
//用扩展欧几里得求出k
//注意一下k需要为最小正数
#include
#include
#include
using namespace std ;
typedef __int64 ll ;
ll exgcd(ll a , ll b , ll &x , ll &y)
{
...
分类:
其他好文 时间:
2015-05-09 17:33:38
阅读次数:
122
//(a/b)%c ==> a%c = (b*k) %c;
// k = (a*(b_1))%c ,b_1为b的逆元
#include
#include
#include
using namespace std ;
const int mod = 9973 ;
typedef __int64 ll;
int exgcd(int a ,int b , ll &x ,ll &y)
{...
分类:
其他好文 时间:
2015-05-09 16:39:10
阅读次数:
138
题意:给一个数A,有6种操作,+a,-a,+b,-b,+(a+b),-(a+b),每次选择一种,用最少的次数变成B。思路:由于不同的操作先后顺序对最后的结果没有影响,并且加一个数与减一个相同的数不能同时有,如果有,把它们都去掉结果更优。所以不妨设+a操作进行了x次(x为负表示-a操作进行了|x|次,...
分类:
其他好文 时间:
2015-05-06 06:50:46
阅读次数:
584