【洛谷P2485】计算器
2024-09-05 05:53:31
BSGS模板题
代码如下
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL fpow(LL a, LL b, LL c) {
LL ret = 1 % c;
for (; b; b >>= 1, a = a * a % c) {
if (b & 1) {
ret = ret * a % c;
}
}
return ret;
}
LL bsgs(LL a, LL b, LL p) {
b %= p;
unordered_map<LL, LL> mp;
LL t = (LL)sqrt(p) + 1;
for (int i = 0; i < t; i++) {
LL val = b * fpow(a, i, p) % p;
mp[val] = i;
}
a = fpow(a, t, p);
if (a == 0) return b == 0 ? 1 : -1;
if (b == 0) return -1;
if (b == 1) return 0;
for (int i = 0; i <= t; i++) {
LL val = fpow(a, i, p);
LL j = mp.find(val) == mp.end() ? -1 : mp[val];
if (j >= 0 && i * t - j >= 0) {
return i * t - j;
}
}
return -1;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T, opt;
cin >> T >> opt;
while (T--) {
LL y, z, p;
cin >> y >> z >> p;
if (opt == 1) {
cout << fpow(y, z, p) << endl;
} else if (opt == 2) {
if (y % p == 0) {
cout << "Orz, I cannot find x!" << endl;
} else {
cout << z * fpow(y, p - 2, p) % p << endl;
}
} else {
LL ret = bsgs(y, z, p);
if (ret == -1) {
cout << "Orz, I cannot find x!" << endl;
} else {
cout << ret << endl;
}
}
}
return 0;
}
最新文章
- 使用T4模板生成代码的学习
- [THINKING IN JAVA]操作符
- vmware-question
- 解决";System.AccessViolationException”类型的未经处理的异常在 未知模块(IIS Worker Process 已停止工作)导致无法连接远程数据库的问题
- override与overload的区别
- 前端里神奇的BFC 原理剖析
- Shell 显示带颜色字体
- 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
- hdu 1042
- easyUI的datagrid控件日期列不能正确显示Json格式数据的解决方案
- HDOJ 1495 非常可乐 【BFS】
- Java JDK 8 安装和环境变量的配置(Linux and Windows)
- JSP和JSTL
- 【NOIP2013提高组】火柴排队
- Webpack 2 视频教程 013 - 自动分离 CSS 到独立文件
- MarkdownPad
- 03SQLALchemy外键约束
- ThreadLocal的意义和实现
- chinalife的经验
- java实现将指定文件夹里所有文件路径输出到指定文件作为参数化文件给lr脚本使用
热门文章
- 不同Json工具对空串和NULL的序列号处理:net.sf.json 和 fastjson
- js 中json遍历 添加 修改 类型转换
- IDEA Java 源发行版 8 需要目标发行版 1.8
- GitHub克隆下载代码速度慢解决办法
- oracle 创建新用户,授权dba
- mac 环境下mysql登陆失败问题Access denied for user &#39;root&#39;@&#39;localhost&#39; (using passwordYES)
- xtrabackup原理,整库,单表,部分备份恢复
- 怎样在页面关闭时发起HTTP请求
- 旋转动画(RotateTransform)
- python 画正态曲线