bzoj 1467 exBSGS
X^Y mod Z = K 给出X、Y、Z,我们都知道如何很快的计算K。但是如果给出X、Z、K,你是否知道如何快速的计算Y呢?
x,z不互质:exBSGS
详见:https://blog.csdn.net/ww140142/article/details/47837521
x,z互质,用exgcd求逆元
关于逆元的几种求法和运用:
https://blog.csdn.net/acdreamers/article/details/8220787(例题)
https://blog.csdn.net/guhaiteng/article/details/52123385
数学题一定要先推清楚式子再写
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;typedef long long ll;
ll x,y,z,k,inv;
map <int,int> mp;ll log_(ll x){return (ll)(log(x) / log(2));
}
ll gcd(ll x,ll y){if ( !y ) return x;return gcd(y,x % y);
}
ll power(ll x,int y){ll res = 1;while ( y ){if ( y & 1 ) res = res * x % z;x = x * x % z;y >>= 1;}return res;
}
void exgcd(ll x,ll z,ll &a,ll & b){if ( !z ){a = 1 , b = 0;return;}exgcd(z,x % z,a,b);ll t = a;a = b , b = t - x / z * b;
}
ll getinv(ll x,ll z){ll a,b;exgcd(x,z,a,b);return (a % z + z) % z;
}
int BSGS(ll a,ll b){int sz = (int)sqrt(z) + 1; ll x = b;for (int i = 0 ; i <= sz ; i++){if ( !mp[x] ) mp[x] = i + 1;x = x * inv % z;}if ( mp[1] ) return mp[1] - 1;a = power(a,sz) , x = 1;for (int i = 1 ; i <= z / sz + 1 ; i++){x = x * a % z;if ( mp[x] ) return mp[x] + sz * i - 1;}return -1;
}
int check(){ll cur = x % z;for (int i = 1 ; i <= log_(z) + 1 ; i++){if ( cur == k ) return i - 1;cur = cur * x % z;}int cnt = 0; ll d = gcd(x,z),p = d;while ( d != 1 ){cnt++ , z /= d;d = gcd(x,z) , p = p * d;}if ( k % p != 0 ) return -1;inv = getinv(x,z);k = k * power(inv,cnt) % z;int ans = BSGS(x,k);if ( ans == -1 ) return -1;return ans + cnt;
}
int main(){freopen("input.txt","r",stdin);while ( 1 ){cin>>x>>z>>k;if ( !x && !z && !k ) break;mp.clear();int d = check();if ( d != -1 ) printf("%d\n",d);else printf("No Solution\n");}return 0;
}
bzoj 1467 exBSGS相关推荐
- BZOJ 1467 Pku3243 clever Y EXBSGS
题意:链接 方法: EXBSGS 解析: 这题与BSGS不同的地方就是模数可能不是质数了. 那怎么办呢? 其实也没什么,就是我们不断地分解A和当前的C的最大公约数,注意是当前的C. 假设我们最多分出来 ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- BZOJ 2957楼房重建
传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
- bzoj 4871: [Shoi2017]摧毁“树状图”
4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec Memory Limit: 512 MB Submit: 53 Solved: 9 [Su ...
- BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...
- BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x Weblink https://hydro.ac/d/bzoj/p/1590 P ...
- BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...
最新文章
- 燃烧学往年精选真题解析
- Python 模块之heapq
- php自定义中文分词方法,php实现的中文分词类完整实例
- 前端系统化学习【JS篇】:(三)Javascript中的命名规范
- 小心!你的脸正在成为色情片主角
- 谷歌在线appspot平台教你学Hacker(由浅如深)-XSS篇
- 大数阶乘 nyoj28
- 两步解决科来数据包生成器找不到网卡的问题
- 云服务器的安全设置常识
- Kickoff(上路了)
- @Param注解的用法
- doito-001(余光中)
- VC中CList用法
- The Shawshank Redemption-4
- 【区块链技术开发】剖析区块链Ganache模拟器工具及其智能合约部署区块链的查询方式
- 扫雷超详解(可展开一片空白)
- 为什么我从iOS返回Android
- JS截取URL中最后一个斜杆前(后)的内容
- 可视化实验一:大数据可视化工具—Excel
- 台式电脑无法修复计算机,台式电脑自动关机开机无法修复怎么办
热门文章
- python函数变量教程_Python 函数变量
- 抖音作品实时监控采集数据,抖音达人下关键词数据抓取
- 题目234 吃土豆
- 风清扬环保:分析乳化液破乳剂的实际应用
- 给马云、马化腾订制旅行,这家公司想做旅游行业的“得到”
- JSP七动作---<jsp:setProperty>
- 小熊派 LVGL 移植文件系统
- 关于手机-Android版本-基带版本,连续点击六次进入工厂模式。自定义版本点五次动态隐藏显示某应用。
- html让图片悬浮在网页,网页制作灰度图片悬浮效果利用HTML5和jQuery实现
- 【郝生活】如何下载微博视频(PC)