BZOJ 3239 Discrete Logging(BSGS)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3239
【题目大意】
计算满足 Y^x ≡ Z ( mod P) 的最小非负整数
【题解】
BSGS裸题。
【代码】
#include <cstdio>
#include <cmath>
#include <map>
#include <algorithm>
#include <tr1/unordered_map>
using namespace std::tr1;
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
int phi(int n){
int t=1,i;
for(i=2;i*i<=n;i++)if(n%i==0)for(n/=i,t*=i-1;n%i==0;n/=i,t*=i);
if(n>1)t*=n-1;
return t;
}
int pow(ll a,int b,int m){ll t=1;for(;b;b>>=1,a=a*a%m)if(b&1)t=t*a%m;return t;}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int exgcd(int a,int b,int&x,int&y){
if(!b)return x=1,y=0,a;
int d=exgcd(b,a%b,x,y),t=x;
return x=y,y=t-a/b*y,d;
}
int bsgs(int a,int r,int m){
if(r>=m)return -1;
int i,g,x,c=0,at=int(2+sqrt(m));
for(i=0,x=1%m;i<50;i++,x=ll(x)*a%m)if(x==r)return i;
for(g=x=1;__gcd(int(ll(x)*a%m),m)!=g;c++)g=__gcd(x=ll(x)*a%m,m);
if(r%g)return -1;
if(x==r)return c;
unordered_map<int,int>u;
g=phi(m/g),u[x]=0;g=pow(a,g-at%g,m);
for(i=1;i<at;i++){
u.insert(P(x=ll(x)*a%m,i));
if(x==r)return c+i;
}
for(i=1;i<at;i++){
unordered_map<int,int>::iterator t=u.find(r=ll(r)*g%m);
if(t!=u.end())return c+i*at+t->second;
}return -1;
}
void solve(int y,int z,int p){
y%=p; z%=p;
int t=bsgs(y,z,p);
if(t==-1){puts("no solution");return;}
else printf("%d\n",t);
}
int main(){
int a,b,c;
while(~scanf("%d%d%d",&a,&b,&c))solve(b,c,a);
return 0;
}
BZOJ 3239 Discrete Logging(BSGS)的更多相关文章
- BSGS 扩展大步小步法解决离散对数问题 (BZOJ 3239: Discrete Logging// 2480: Spoj3105 Mod)
我先转为敬? orz% miskcoo 贴板子 BZOJ 3239: Discrete Logging//2480: Spoj3105 Mod(两道题输入不同,我这里只贴了3239的代码) CODE ...
- bzoj 3239: Discrete Logging && 2480: Spoj3105 Mod【BSGS】
都是BSGS的板子题 此时 \( 0 \leq x \leq p-1 \) 设 \( m=\left \lceil \sqrt{p} \right \rceil ,x=i*m-j \)这里-的作用是避 ...
- POJ-2417-Discrete Logging(BSGS)
Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an integer N, 1 <= N &l ...
- BZOJ 3239: Discrete Logging [BGSG]
裸题 求\(ind_{n,a}b\),也就是\(a^x \equiv b \pmod n\) 注意这里开根不能直接下取整 这个题少了一些特判也可以过... #include <iostream& ...
- 【BZOJ5296】【CQOI2018】破解D-H协议(BSGS)
[BZOJ5296][CQOI2018]破解D-H协议(BSGS) 题面 BZOJ 洛谷 Description Diffie-Hellman密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方 ...
- LTE Manual ——Logging(翻译)
LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 9 Logging ns-3 日志功能可以用于监测或调试仿真程序的进展.日志输出可以通过 ma ...
- POJ 2417 Discrete Logging(离散对数-小步大步算法)
Description Given a prime P, 2 <= P < 231, an integer B, 2 <= B < P, and an integer N, 1 ...
- POJ 2417 Discrete Logging (Baby-Step Giant-Step)
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2819 Accepted: 1386 ...
- [POJ2417]Discrete Logging(指数级同余方程)
Discrete Logging Given a prime P, 2 <= P < 2 31, an integer B, 2 <= B < P, and an intege ...
随机推荐
- 6、MySQL索引种类
1.普通索引 这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引. –直接创建索引 CRE ...
- 解决vue代码缩进报错问题 关闭ESlint
前言 使用vue-cli来构建单页SPA应用,提示代码缩进报错 原因分析 通过查看package.json文件我们可以发现,在文件中默认安装了eslint-loader模块,eslint-loader ...
- 静态资源(JS/CSS)存储在localStorage
一.简单了解SEO SEO由英文Search Engine Optimization缩写而来, 中文意译为“搜索引擎优化”.SEO是指从自然搜索结果获得网站流量的技术和过程. 搜索引擎不优化的网站分为 ...
- js中的return
retrun true: 返回正确的处理结果. return false:分会错误的处理结果,终止处理. return:把控制权返回给页面(如果条件满足,后面的逻辑就不执行了). if(this.in ...
- frp 使用入门
1.下载安装对应系统版本 https://github.com/fatedier/frp/releases/ 2.将下载的frp移动到系统软件目录 mv frp/ /usr/local 3.配置frp ...
- devm_xxx机制
前言 devm是内核提供的基础机制,用于方便驱动开发者所分配资源的自动回收.参考内核文档devres.txt.总的来说,就是驱动开发者只需要调用这类接口分配期望的资源,不用关心释放问题.这些资源的释放 ...
- linux信号Linux下Signal信号太详细了,终于找到了
linux信号Linux下Signal信号太详细了,终于找到了 http://www.cppblog.com/sleepwom/archive/2010/12/27/137564.html
- 【数位dp入门】【HDU4734】F(x)
记录减的状态,表示还要凑多少才能达到当前值. 然后进行枚举即可.注意状态数不能重复. #include<bits/stdc++.h> #define N 10010 using names ...
- socket实现udp与tcp通信-java
1.简单介绍Socket Socket套接字 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信. 数 ...
- linux命令(22):mkdir命令
实例1:创建一个空目录 mkdir test 实例2:递归创建多个目录 mkdir -p /home/test 实例3:创建权限为777的目录 mkdir -m 777 test 实例4:创建新目 ...