就是求Ax三B(mod C)当C为素数时

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
const int MAXINT = (( << ) - ) * + ; int A, B, C;
struct Hashmap //哈希表代替map
{
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] = MAXINT; 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];
}
};
Hashmap 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), 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++) //先把A^j存进哈希表
{
f[Base] = min(f[Base], i);
Base = ((LL)Base*A) % C;
}
for (int i = ; i <= m - ; i++)
{
int x, y, r = exgcd(D, C, x, y);
x = ((LL)x*B%C + C) % C; //扩欧求A^j
if (f.count(x)) return i*m + f[x]; //找到了
D = ((LL)D*Base) % C;
}
return -;
}
int main()
{
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 ;
}

Discrete Logging ZOJ - 1898 (模板题大小步算法)的更多相关文章

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

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

  2. hdu 2586 How far away?(LCA模板题+离线tarjan算法)

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. hdu-3549 Flow Problem---最大流模板题(dinic算法模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目大意: 给有向图,求1-n的最大流 解题思路: 直接套模板,注意有重边 传送门:网络流入门 ...

  4. P1184 高手之在一起(字典树模板题,hash算法, map)

    哎,唯一值得说明的是,这道题的输入有bug 先把字典树的算法模板放一下 #include<iostream> #include<cstring> using namespace ...

  5. HDU2255 奔小康赚大钱 (最大权完美匹配) 模板题【KM算法】

    <题目链接> 奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊 ...

  6. HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】

    <题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...

  7. hdu 4009 最小树形图模板题朱刘算法

    #include<stdio.h> /*思路:显然对于每个地方, 只有一种供水方式就足够了,这样也能保证花费最小, 而每个地方都可以自己挖井,所以是不可能出现无解的情况的, 为了方便思考, ...

  8. BSGS算法(大小步算法)

    $BSGS$ 算法 $Baby\ Steps\ Giant\ Steps$. 致力于解决给定两个互质的数 $a,\ p$ 求一个最小的非负整数 $x$ 使得 $a^x\equiv b(mod\ p)$ ...

  9. [poj2449]Remmarguts' Date(K短路模板题,A*算法)

    解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...

随机推荐

  1. vue 前台传后台

    var the = this:let url = "/api/Purchase_Enter/CancelEnter"; let params = { Enter_Id: Enter ...

  2. CentOS 7 安装 .Net Core 2.0 详细步骤

    轰轰烈烈的Core 热潮,从部署环境开始.参照了网上不少前辈的教程,也遇到不少的坑,这边做个完整的笔记. 一.构建.Net core 2的应用程web发布,因为是用来测试centos上的core 环境 ...

  3. iview 刷新滞后于html问题

    一.问题描述 每次刷新页面,下面的内容就会一闪而过. 一闪而过后恢复正常: 二.解决 问题代码: @*<span>修改密码</span>*@ @*<span>{{m ...

  4. MySQL学习(二) 数据类型

    MySQL支持多种列类型:数值类型.日期/时间类型和字符串(字符)类型. 数值类型 数值类型又分为整数型与小数型 整数型 下面的表显示了需要的每个整数类型的存储和范围 创建一张表 mysql> ...

  5. ELK日志分析平台系统CentOS7环境搭建和基本使用

    一.搭建环境 系统环境:CentOS7 安装iptables:https://blog.csdn.net/momo_mutou/article/details/81739155 jdk1.8:  ht ...

  6. 深入理解JVM——对象

    对象的创建 虚拟机遇到一条new指令时,首先检查指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,必须先执行相应的类加载过程. 接下 ...

  7. 设计模式-享元模式(FlyWeight)

    一.概念 享元模式是对象的结构模式,它以共享的方式高效的支持大量的细粒度对象,减少对象的数量,并达到节约内存的目的. 享元对象能够做到共享的关键,主要是区分了内部状态和外部状态,内部状态是对象是在建立 ...

  8. 【CSS学习】--- 盒子模型

    一.前言:这篇只作为本人的笔记,以后慢慢再补充. 页面中的所有元素都可以被看作一个一个的“盒子”.这些盒子都包含了:内容(content).内边距(padding).边框(border)以及外边距(m ...

  9. ajax文件上传-FormData()

    HTML: <form action=""> <input type="file" id="file1" name=&qu ...

  10. 在Centos下面FTP映射方案

    前两天公司要在一台Centos的机子上,把一些文件定时备份到另外一台ftp服务器上, 在Linux系统中,mount是不支持直接挂在"ftp://192.168.1.1/backup&quo ...