就是求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. msql 必知必会笔记

    Edit Mysql 必知必会 第一章 理解SQL 什么是数据库 数据库(database) 保存有组织的数据的容器 什么是表  一组特定类型的数据的结构化清单 什么是模式  数据库和表的布局及特性的 ...

  2. [NOI 2017]蚯蚓排队

    Description 题库链接 蚯蚓幼儿园有 \(n\) 只蚯蚓.幼儿园园长神刀手为了管理方便,时常让这些蚯蚓们列队表演. 所有蚯蚓用从 \(1\) 到 \(n\) 的连续正整数编号.每只蚯蚓的长度 ...

  3. drupal简单安装和插件安装

    1.从官网下载drupal安装包:https://www.drupal.org/download 2.windows下使用WAMPSERVER作为php的服务器,在官网http://www.wamps ...

  4. sort、sorted高级排序-Python3.7 And 算法<七>

    1.sort(*, key=None, reverse=False) sort()接受两个参数,这两个参数只能通过关键字(关键字参数)传递. 参数key:带一个参数的函数(排序时,会依次传入列表的每一 ...

  5. scala 基础

    1.scala一些预热操作 1.1 to 是一个方法,()可以进行 参数传递,map()把每一个元素取出来进行相应的操作,  print(1.to(10).map(_*10))  结果  Vector ...

  6. [android] 手机卫士应用程序更新和签名

    弹出升级对话框 获取AlertDialog.Builder对象,通过new出来 调用Builder对象的setTitle()方法,参数:文本 调用Builder对象的setMessage()方法,参数 ...

  7. Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)

    最近一直在接触第三方,刚接入完支付宝的API做一下总结,个人能力薄弱有不对的地方望指教.  做的是一个小型电商项目,所以会接入第三方的支付和登入功能, 第一次接入第三方撸了很多官方文档. 进入主题, ...

  8. es6中的Promise学习

    关于Promise Promise实例一旦被创建就会被执行 Promise过程分为两个分支:pending=>resolved和pending=>rejected Promise状态改变后 ...

  9. React 入门学习笔记整理(三)—— 组件

    1.定义组件 1)函数组件 function GreateH(props){ return <div> <h2>hello,{props.name}</h2> &l ...

  10. javascript arguments参数问题

    function f(a, b, c){ alert(arguments.length); // result: "2" a = 100; alert(arguments[0]); ...