--------gcd/扩展gcd
扩展的灰
扩展的灰(Extended Ash)
展开
-
Jzoj4745 看电影
听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N(N >= K)人。于是机智的你想到了一个公平公正的方法决定哪K人去看电影。N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下K个人。但这样显然太无聊了,于是小S又想出一个牛逼的方法。原创 2017-10-23 19:37:55 · 359 阅读 · 0 评论 -
Jzoj5317 Func
f(1)=1 f(2x)=f(x) f(2x+1)=f(x)+f(x+1) 给出n第一道类欧算法我们考虑一个性质 f(2x+1)=f(x)+f(x+1)=f(2x)+f(2x+2)所以,显然有f(2x+1)>f(2x) f(2x+1)>f(2x+2)那么现在我们知道了f(2x+1),自然考虑枚举一个f(2x)可以按照以下形式转移:f(2x+1),f(2x)->f(x原创 2018-01-22 19:11:48 · 265 阅读 · 0 评论 -
Jzoj5449【NOIP2017提高A组冲刺11.4】Pacifist
papyrus 喜欢谜题... 来解一道如何?在你面前有一个被加密了的数组,其原数组是一个等差序列,你面前的则是将原数组中的所有数字都对m 取模再打乱后而得到的新数组papyrus 给你出的谜题就是还原出原等差序列a保证数据有解,而且因为papyrus 喜欢质数,所以他给你出的谜题中的m 一定是质数今天题目还挺好玩的,虽然第二题因为数据太多OJ最后挂了全场爆0但是还原创 2017-11-04 21:22:54 · 298 阅读 · 0 评论 -
一些基础算法的模板(持续更新)
更新中//Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft//To be continued...//Suffix Automationchar str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin原创 2017-10-25 22:05:58 · 3734 阅读 · 0 评论 -
Jzoj4699 Password
首先,orzYxuanwKeith,这套题后面两个把我虐爆了我们发现,B序列每一个元素都肯定出现在A中,那么考虑最大的元素B1,显然就是A中元素最大的那个删除后让后我们继续求B2,显然也是最大的那个,让后删除B2,gcd(B1,B2)后,我们就可以得到B3....以此类推偷懒用了map+O3#pragma GCC optimize("O3")#pragma G++ opt原创 2017-10-12 16:05:46 · 420 阅读 · 0 评论 -
Jzoj4714 公约数
给你n求gcd(i,j)=i xor j的对数(i,j这题看似反演,其实是一个结论题,code就150byte我们发现gcd(i,j)所以,我们要求的对数就是gcd(i,j)=i-j=i^j我们枚举i和它的倍数j=ki,那么显然,gcd(j,j-i)=i,所以只需要判断i^j=j-i即可很重要的一点!i^j要打括号!不要写成了i^j==j-i!#includeint原创 2017-10-15 11:19:11 · 279 阅读 · 0 评论 -
Jzoj3780 Magical GCD
给你一个序列s,求区间[l,r]使得gcd(s[l]~s[r])*(r-l+1)最大,输出这个最大值,n显然,我们暴力是不可以过的,那么我们考虑一下的做法:我们维护一个g数组,g[i]表示gcd(s[i]~s[r])那么我们每次移动r指针,让后重新更新g数组,显然每个g[i]可以O(lg k)更新,但是这样的复杂度依然是n^2lgk我们发现,对于g[i]=g[j]而且i为什么?原创 2017-09-28 16:25:36 · 385 阅读 · 0 评论 -
Jzoj3093 合唱队形
这个题就是中国剩余定理了,这里介绍一种用扩展gcd的方法(本质上二者没有区别)我们来考虑两个同余方程 X=A(MOD M1) 和 X=B(MOD M2)我们可以将其变形成为求一个方程 M1x+M2y=(B-A)是否有解,这里用扩展gcd即可如果没有显然直接退出,如果有,那么令A'=x*M1+A,M'=M1*M2/gcd(M1,M2)那么我们就将这两个方程X=A(MOD M1) 和 X=B(MOD M2)合并成了一个方程 X=A'(MOD M')为什么这样是对的呢?原创 2017-09-25 14:59:55 · 395 阅读 · 0 评论 -
Jzoj3192 球
小包有N个球和A个盒子。球标号为0到N-1,盒子编号为0到A-1。标号为x的球放在下标为x mod A的盒子里。然后他得到了B个新盒子,编号为0到B-1。他想把所有球从旧盒子里面拿出来放到新盒子,标号为x的球放在下标为x mod B的盒子里。对于某个球来说,如果原本放在下标为a的旧盒子,现在放在下表为b的新盒子,那么费用为|a-b|。求出总花费。a,b这个题比较有趣首先我们原创 2017-09-25 15:41:26 · 338 阅读 · 0 评论 -
Jzoj2581 最大公约数
sum:=0; for i:=1 to n-1 do for j:=i+1 to n do sum:=sum+gcd(i,j)显然这个程序的效率是很低的,小明打算写一个更强的程序,在求出sum的同时比妹妹跑的更快。我们令A[i]为Σgcd(i,j)(j∈[1,i])那么很显然的,gcd(i,j)为i的因数,而当gcd(i,j)=1时,原创 2017-09-20 20:40:27 · 404 阅读 · 0 评论 -
Jzoj2270 【SDOI2011】计算器
1、给定 y、z、p,计算y^z mod p的值; 2、给定 y、z、p,计算满足xy≡z(mod p)的最小非负整数 ; 3、给定y、z、p,计算满足y^x≡z(mod p)的最小非负整数 。第一问不说,第二问请看 同余方程 主要说第三问第三问是经典的离散对数(其实我并不会而且也基本不考)我们使用经典的giant-step-baby-step算法,令s=sqrt(m)原创 2017-09-20 20:06:42 · 240 阅读 · 0 评论 -
Jzoj1460 无题noname
给定一个N,求出所有1到N之间的x,使得x^2=1(mod N)。将这个式子变形(x-1)(x+1)=0(MOD P) ,那么就可以枚举P的每一对因数(a,b),我们把方程化为ax*by=P*T(T为任意常数)那么这里ax,by必须满足ax-by=2,这个可以用扩展gcd求解求出x,y后,我们将所有形如a*(x*(2/gcd)+k*(b/r))的解加入vector并排序输出(注原创 2017-09-20 19:34:15 · 307 阅读 · 0 评论 -
扩展gcd以及同余方程ax=b(mod M)
关于扩展gcd其实没有必要搞懂,背下来就好了如果不会的自行学习对于方程ax=b(mod M),我们可以将其化简成为ax+My=b,让后用扩展gcd求解当b|r=gcd(a,M)时,方程有r个解,否则无解,对于有解的情况,每个解为用gcd求出的x乘上b/r+k*(M/r)int extgcd(int a,int b,int& x,int& y){ if(b){ int r=extg原创 2017-09-19 18:48:56 · 2041 阅读 · 0 评论 -
Jzoj1158荒岛野人
正解:同余方程对于每对野人i,j,解方程(p[i]-p[j])=c[j]-c[i](mod Answer) 若在min(l[i],l[j])以内有解则不行(++ANS)否则可以#include#includeusing namespace std;int c[20],p[20],l[20],n,M;int extgcd(int a,int b,int& x,int& y){原创 2017-09-19 18:47:19 · 580 阅读 · 0 评论 -
51Nod1038 X^A Mod P
题目看这里 经典的n次剩余问题,用到很多数论知识点 1.扩展gcd 2.原根 3.离散对数 4.n次剩余 说一下这个算法的流程 首先,我们的方程为xn=a(mod m)xn=a(mod m)x^n=a(mod\ m) m为质数 那么,我们首先要找m的原根g,这里g要满足的性 质就是对于任意<fontsize=8>&lt原创 2018-08-02 09:54:28 · 339 阅读 · 0 评论