Cipolla

LL ksm(LL k,LL n)
{
LL s=1;
for(;n;n>>=1,k=k*k%mo) if(n&1) s=s*k%mo;
return s;
} namespace number
{
LL D;
struct Z
{
LL x,y;
Z(LL _x=0,LL _y=0){x=_x,y=_y;}
};
Z operator +(const Z &x,const Z &y) {return Z((x.x+y.x)%mo,(x.y+y.y)%mo);}
Z operator -(const Z &x,const Z &y) {return Z((x.x-y.x+mo)%mo,(x.y-y.y+mo)%mo);}
Z operator *(const Z &x,const Z &y) {return Z((x.x*y.x%mo+D*x.y%mo*y.y%mo+mo)%mo,(x.y*y.x%mo+x.x*y.y%mo)%mo);}
Z opt(const Z &x) {return Z(mo-x.x,mo-x.y);}
Z pwr(Z k,LL n)
{
Z s=Z(1,0);
for(;n;n>>=1,k=k*k) if(n&1) s=s*k;
return s;
}
}
using namespace number;//其实这部分像减法,相反数什么的都没什么用... pair<LL,LL> cipolla(LL k)
{
k%=mo;
if(ksm(k,(mo-1)/2)==mo-1) return make_pair(-1,-1);
if(k==0) return make_pair(0,0);
LL a=rand()%mo;
while(ksm((a*a%mo-k+mo)%mo,(mo-1)/2)<=1) a=rand()%mo;
D=(a*a%mo-k+mo)%mo;
LL v=(pwr(Z(a,1),(mo+1)/2)).x;
return make_pair(v,mo-v);
}

BSGS

LL ds[N];
int ud[N];
#define mo1 10000007
vector<LL> h[mo1];
LL hp[mo1];
int hs(LL v)
{
int k=v%mo1;
while(hp[k]!=-1&&hp[k]!=v) k=(k==mo1-1)?k:k+1;
return k;
}
void BSGS(LL x,LL a)
{
static LL ds2[N];
ds2[0]=ds[0]=0;
LL q=sqrt(mo);
ud[0]=0;
LL v=a;
fo(i,0,q-1)
{
int w=hs(v);
if(hp[w]==-1) ud[++ud[0]]=w,hp[w]=v;
h[w].push_back(i);
v=v*x%mo;
}
LL v2=1,vq=ksm(x,q);
for(int i=0;i-q<=mo;i+=q)
{
int w=hs(v2);
if(hp[w]!=-1)
{
int r=h[w].size();
fo(j,0,r-1) ds2[++ds2[0]]=(i-h[w][j]+mo-1)%(mo-1);
}
v2=v2*vq%mo;
}
sort(ds2+1,ds2+ds2[0]+1);
fo(i,1,ds2[0]) if(i==1||ds2[i]!=ds2[i-1]) ds[++ds[0]]=ds2[i];
fo(i,1,ud[0]) h[ud[i]].clear(),hp[ud[i]]=-1;
}

【模板】【数论】二次剩余Cipolla算法,离散对数BSGS 算法的更多相关文章

  1. 【算法】BSGS算法

    BSGS算法 BSGS算法用于求解关于x的模方程\(A^x\equiv B\mod P\)(P为质数),相当于求模意义下的对数. 思想: 由费马小定理,\(A^{p-1}\equiv 1\mod P\ ...

  2. BSGS算法学习笔记

    从这里开始 离散对数和BSGS算法 扩展BSGS算法 离散对数和BSGS算法 设$x$是最小的非负整数使得$a^{x}\equiv b\ \ \ \pmod{m}$,则$x$是$b$以$a$为底的离散 ...

  3. BSGS算法总结

    BSGS算法总结 \(BSGS\)算法(Baby Step Giant Step),即大步小步算法,用于解决这样一个问题: 求\(y^x\equiv z\ (mod\ p)\)的最小正整数解. 前提条 ...

  4. 二次剩余Cipolla算法学习笔记

    对于同余式 \[x^2 \equiv n \pmod p\] 若对于给定的\(n, P\),存在\(x\)满足上面的式子,则乘\(n\)在模\(p\)意义下是二次剩余,否则为非二次剩余 我们需要计算的 ...

  5. uva11916 bsgs算法逆元模板,求逆元,组合计数

    其实思维难度不是很大,但是各种处理很麻烦,公式推导到最后就是一个bsgs算法解方程 /* 要给M行N列的网格染色,其中有B个不用染色,其他每个格子涂一种颜色,同一列上下两个格子不能染相同的颜色 涂色方 ...

  6. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  7. BSGS算法

    BSGS算法 我是看着\(ppl\)的博客学的,您可以先访问\(ppl\)的博客 Part1 BSGS算法 求解关于\(x\)的方程 \[y^x=z(mod\ p)\] 其中\((y,p)=1\) 做 ...

  8. BSGS算法及其扩展

    bsgs算法: 我们在逆元里曾经讲到过如何用殴几里得求一个同余方程的整数解.而\(bsgs\)就是用来求一个指数同余方程的最小整数解的:也就是对于\(a^x\equiv b \mod p\) 我们可以 ...

  9. POJ2417 Discrete Logging | A,C互质的bsgs算法

    题目: 给出A,B,C 求最小的x使得Ax=B  (mod C) 题解: bsgs算法的模板题 bsgs 全称:Baby-step giant-step 把这种问题的规模降低到了sqrt(n)级别 首 ...

随机推荐

  1. MVC学习途径

    博客园专题:http://kb.cnblogs.com/zt/mvc/ MVC源码:http://www.codeplex.com/site/search?projectSearchText=mvc ...

  2. Nginx配置与使用

    一.简单介绍 由俄罗斯程序员IgorSysoev研发,2004年开源公布,特点是:内存cpu占用低,并发能力强,稳定,配置示例,反向代理:互联网企业 70%以上公司都在使用 nginx: 二.安装 1 ...

  3. 初步学习jquery学习笔记(二)

    jQuery事件 jquery是为事件处理而设计的 什么是事件? 页面对不同访问者的相应叫做事件. 事件处理程序指的是html中发生某些事件所调用的方法 实例: 在元素上移动鼠标 选取单选按钮 点击元 ...

  4. window7下安装Elasticseach5.2.2

    1. 安装JDK,至少1.8.0_73以上版本 java -version 2. 下载和解压缩Elasticsearch安装包,目录结构 3. 启动Elasticsearch:bin\elastics ...

  5. 专心研发CPU?传Intel外包芯片组设计给祥硕

    在本届台北电脑展上,AMD除了推出7nm锐龙3000处理器之外,还发布了新一代平台X570芯片组,首发了消费级PCIe 4.0技术支持.X570芯片组因为技术难度更高,所以这一代是AMD亲自出手设计研 ...

  6. linuxCentOS6.8搭建Apache,用http访问svn

    前提:SVN已经安装配置ok,可以正常访问 目前本人svn用小乌龟客户端svn协议访问地址为:svn://ip:3691/opt/svn/repository,端口后面的是svn仓库的路径 那么如果从 ...

  7. 文件I/O编程 (select)

    Select的I/O多路转接模型是处理I/O复用的一个高效方法.Select函数语法要点所需头文件: #include<sys/types.h> #include<sys/time. ...

  8. 【转】Linux内核中分配4M以上大内存的方法

    在Linux内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数,     "if (unlikely(order & ...

  9. [SCOI2016]幸运数字(线性基,倍增)

    [SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作 ...

  10. Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行

    A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...