先来稍微回顾一下,我们已经会求模线性方程(包括其特殊情况乘法逆元)

我们还会进行幂取模的快速算法(模是质数用费马小定理,模一般情况用欧拉定理)

对于幂中指数特别大的情况,我们还延伸出了拓展欧拉定理来解决

对于模线性方程组来说,模数互质的时候直接用孙子定理

模数不互质的时候用方程合并的思想,引申出拓展中国剩余定理

接下来要学的这个东西可以说也是解模方程的,只不过是超越方程

咋超越的呢?

方法不容变通,直接抄过来

转自https://blog.csdn.net/zzkksunboy/article/details/73162229

典型例题是POJ2417,就是求这个东西

要求一个最小整数解

脑子不够用了QAQ睡眠QAQ

 #include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Hashmap
{
static const int Ha=,maxe=;
int E,lnk[Ha],son[maxe+],nxt[maxe+],w[maxe+];
int top,stk[maxe+];
void clear(){E=;while(top) lnk[stk[top--]]=;}
void Add(int x,int y){son[++E]=y;nxt[E]=lnk[x];w[E]=0x7fffffff;lnk[x]=E;}
bool count(int y)
{
int x=y%Ha;
for(int j=lnk[x];j;j=nxt[j])
if(y==son[j]) return true;
return false;
}
int& operator [](int y)
{
int x=y%Ha;
for(int j=lnk[x];j;j=nxt[j])
if(y==son[j]) return w[j];
Add(x,y);stk[++top]=x;return w[E];
}
}f;
int exgcd(int a,int b,int &x,int &y)
{
if(b==) {x=;y=;return a;}
int r=exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
return r;
}
int BSGS(int A,int B,int C)
{
if(C==) if(B==) return A!=;else return -;
if(B==) if(A!=) return ;else return -;
if(A%C==) if(B==) return ;else return -;
int m=ceil(sqrt(C)),D=,Base=;f.clear();
for(int i=;i<=m-;i++)
{
f[Base]=min(f[Base],i);
Base=((long long)Base*A)%C;
}
for(int i=;i<=m-;i++)
{
int x,y,r=exgcd(D,C,x,y);
x=((long long)x*B%C+C)%C;
if(f.count(x)) return i*m+f[x];
D=((long long)D*Base)%C;
}
return -;
}
int main()
{
int A,B,C;
while(scanf("%d%d%d",&C,&A,&B)==)
{
int ans=BSGS(A,B,C);
if(ans==-) printf("no solution\n");
else printf("%d\n",ans);
}
return ;
}

数学:BSGS的更多相关文章

  1. 2018 Arab Collegiate Programming Contest (ACPC 2018) H - Hawawshi Decryption 数学 + BSGS

    H - Hawawshi Decryption 对于一个给定的生成数列 R[ 0 ] 已知, (R[ i - 1 ] * a + b) % p = R[ i ] (p 是 质数), 求最小的 x 使得 ...

  2. 【数学 BSGS】bzoj2242: [SDOI2011]计算器

    数论的板子集合…… Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最 ...

  3. OI题目类型总结整理

    ## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...

  4. [长期更新]模板&算法学习情况

    这里仅作为自我检查用,模板代码请移步其他博文 标+的表示已学完,标?的表示需要进一步学习,标-的表示有计划但未开始学习,标*的表示暂时没有计划学习 数学 ?BSGS +FFT&NTT ?Luc ...

  5. 数学:拓展BSGS

    当C不是素数的时候,之前介绍的BSGS就行不通了,需要用到拓展BSGS算法 方法转自https://blog.csdn.net/zzkksunboy/article/details/73162229 ...

  6. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)

    哎呀大水题..我写了一个多小时..好没救啊.. 数论板子X合一? 注意: 本文中变量名称区分大小写. 题意: 给一个\(n\)阶递推序列\(f_k=\prod^{n}_{i=1} f_{k-i}b_i ...

  7. BZOJ5296 [CQOI2018] 破解D-H协议 【数学】【BSGS】

    题目分析: 裸题. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; ; #define mp ...

  8. BSGS[bzoj2242][bzoj3122]

    数论题. 操作一:直接快速幂就好了. 操作二:我用了exgcd,shy和lyz都喜欢欧拉函数...QAQ最后这块还写错了. 对于ax+by=gcd(a,b)的形式,我们可以把他们变成y'x+p'y=1 ...

  9. bzoj 1467: Pku3243 clever Y 扩展BSGS

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...

随机推荐

  1. 【树莓派 Raspberry-Pi 】系统安装及一些必要的配置

    上周六刚收到我的小电脑,被无线设置卡住了,文章并非原创,参考了几个朋友的折腾经历,自己整理下备忘,也希望能帮到和我一样在树莓派方面小白的人,也希望可以和更多有这方面兴趣的朋友共同交流 0. 操作系统下 ...

  2. Beta版本软件使用说明

    北京航空航天大学计算机学院 远航1617 小组 产品版本: Beta版本 产品名称:Crawling   is going on 文档作者:杨帆 文档日期:2013/12/24 1.   引言 1.1 ...

  3. 【转】自定义(滑动条)input[type="range"]样式

    1.如何使用滑动条? 用法很简单,如下所示: <input type="range" value="0"> 各浏览器原始样式如下: Chrome:  ...

  4. 【IdentityServer4文档】- 支持协议

    IdentityServer 实现了以下协议: OpenID Connect OpenID Connect Core 1.0 (spec) OpenID Connect Discovery 1.0 ( ...

  5. 活学活用wxPython

    http://www.czug.org/python/wxpythoninaction/

  6. The New Day

    于博毅 160809107 爱好电脑研究 选大学专业的时候,把计算机类放在了第一专业,当时从小就很喜欢计算机,以前有接触过编程但仅限于看书,并没有动手实践过,选课的时候看了一下专业课程,都是我想学的 ...

  7. Ansys Workbench热流固耦合仿真配置

    1.Fluent-Thermal-Structural瞬态分析 此模块连接在fluent已实现流体和固体的热流耦合,传递至thermal实际上只是将流体表面温度作为热载荷施加在固体的液体通道表面,极大 ...

  8. PHP获取网页内容的几种方法

    方法1: 用file_get_contents以get方式获取内容 <?php $url='http://www.domain.com/?para=123'; $html= file_get_c ...

  9. Jenkins系列-Jenkins修改主目录步骤说明

    在使用Jenkins做持续集成过程中,在构建很多次后发现有时在构建的时候系统提示磁盘空间不足,此时检查发现Jenkins的主目录挂载区放在了服务器根目录下,占用空间较大,此时除了对服务器的磁盘进行扩容 ...

  10. TScreen 类 - 通过 Screen 更换光标

    //更换窗体或某个控件的光标可以不通过 Screen 对象, 譬如: begin   Self.Cursor := crAppStart;   Panel1.Cursor := crHandPoint ...