题面

k==1时,快速幂就好了;

k==2时,exgcd就好了,但要注意取模范围的控制;

k==3时,BSGS可以解决高次同余方程:

然后就可以开心的A掉了,但要注意特殊情况的特判

#include <bits/stdc++.h>
using namespace std;
long long KSM(long long a,long long b,long long p)
{
long long res=;
while(b){
if(b&) res=res*a%p;
a=a*a%p;
b/=;
}
return res%p;
}
void solve1(int t)
{
while(t--){
long long y,z,p;
cin>>y>>z>>p;
printf("%lld\n",KSM(y,z,p)%p);
}
}
long long d;
void exgcd(long long a,long long b,long long &x,long long &y)
{
if(b==){
x=;
y=;
d=a;
return;
}
exgcd(b,a%b,y,x);
y-=(a/b)*x;
}
void solve2(int t)
{
while(t--){
long long y,z,p;
cin>>y>>z>>p;
long long ha,la;
exgcd(y,p,ha,la);
if(z%d!=){
cout<<"Orz, I cannot find x!"<<endl;
}
else{
cout<<(((z*ha/d)%p+p)%p+p)%p<<endl;
}
}
}
void BSGS(long long a,long long ans,long long p)
{
map<long long ,long long> Myhash;
ans%=p;
int tmp=sqrt(p)+;
for(int i=;i<tmp;i++){
Myhash[(ans*KSM(a,i,p))%p]=i;
}
a=KSM(a,tmp,p)%p;
if(a==&&ans==){
cout<<""<<endl;
return;
}
if(a==&&ans!=){
cout<<"Orz, I cannot find x!"<<endl;
return;
}
for(int i=;i<=tmp;i++){
if(Myhash.find(KSM(a,i,p))!=Myhash.end()&&(i*tmp-Myhash[KSM(a,i,p)]>=)){
cout<<i*tmp-Myhash[KSM(a,i,p)]<<endl;
return;
}
}
cout<<"Orz, I cannot find x!"<<endl;
}
void solve3(int t)
{
while(t--){
long long y,z,p;
cin>>y>>z>>p;
BSGS(y,z,p);
}
}
int main()
{
int t,k;
cin>>t>>k;
if(k==){
solve1(t);
}
else if(k==){
solve2(t);
}
else solve3(t);
}

LOJ 10214 计算器 题解的更多相关文章

  1. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  2. BZOJ2242:[SDOI2011]计算器——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2242 https://www.luogu.org/problemnew/show/P2485 你被 ...

  3. LOJ P10249 weight 题解

    每日一题 day58 打卡 Analysis 这道题搜索的想法非常巧妙,从两端向中间找,这样可以保证仅仅对于head或tail而言,需要用到的前缀和与后缀和是单调递增的,这样排个序就解决了. 值得一提 ...

  4. LOJ P10013 曲线 题解

    每日一题 day38 打卡 Analysis 这道题运用的是三分,就是说具有一定的单调性,找最大最小值,然后和二分基本类似,就是说特性就是说当前两个点比较,较优的点和最优点在相对了较差点的同侧,就是说 ...

  5. LOJ P10002 喷水装置 题解

    每日一题 day35 打卡 Analysis 先将不符合条件的区间去掉(即半径小于W,不然宽度无法符合),将符合条件的按区间存入节点中.区间的左边界是x-sqrt(r*r-W*W/4.0),要计算x轴 ...

  6. LOJ P10016 灯泡 题解

    每日一题 day50 打卡 Analysis 用初中学的相似推一波式子,再用三分一搞就好了. #include<iostream> #include<cstdio> #incl ...

  7. LOJ P10015 扩散 题解

    每日一题 day49 打卡 Analysis 用dis数组记录每两个点之间的时间,再用一个传递闭包来维护最小的时间就好了 #include<iostream> #include<cs ...

  8. 【网络流24题】最长k可重线段集(费用流)

    [网络流24题]最长k可重线段集(费用流) 题面 Cogs的数据有问题 Loj 洛谷 题解 这道题和最长k可重区间集没有区别 只不过费用额外计算一下 但是,还是有一点要注意的地方 这里可以是一条垂直的 ...

  9. 【网络流24题】最长k可重区间集(费用流)

    [网络流24题]最长k可重区间集(费用流) 题面 Cogs Loj 洛谷 题解 首先注意一下 这道题目里面 在Cogs上直接做就行了 洛谷和Loj上需要判断数据合法,如果\(l>r\)就要交换\ ...

随机推荐

  1. 《剑指offer》算法题第三天

    今日题目: 斐波那契数列 青蛙跳台阶问题(及其变种:变态跳台阶) 矩形覆盖 旋转数组的最小数字 矩阵中的路径 机器人的运动范围 细心的同学会发现,第1,2,3题其实对应的是<剑指>书上的同 ...

  2. List集合的三个实现类比较

    1. ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 2. Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 3. LinkedList 底层数据结构是链 ...

  3. javascript中的原型和原型链(三)

    1. 图解原型链 1.1 “铁三角关系”(重点) function Person() {}; var p = new Person(); 这个图描述了构造函数,实例对象和原型三者之间的关系,是原型链的 ...

  4. Spring Boot教程(三十二)多数据源配置与使用(2)

    Spring-data-jpa支持 对于数据源的配置可以沿用上例中DataSourceConfig的实现. 新增对第一数据源的JPA配置,注意两处注释的地方,用于指定数据源对应的Entity实体和Re ...

  5. sqli-libs(3)

    今天我们来讲解 sqli-libs(3) 有括号的单引号报错  首先我们来查看加入'看报错了 在加‘’ 没报错 证明 存在注入 然后我们看加入’的报错回显的是什么 和我们的sqli-libs(1)的报 ...

  6. Linux上python3的安装和使用

    centos7默认是装有python的,咱们先看一下 #检查python版本 [root@oldboy_python ~ 17:23:54]#python -V Python 2.7.5 但是 pyt ...

  7. C++入门经典-例2.17强制类型转换

    1:代码如下: // 2.17.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using ...

  8. js手写笔记

    1.document.write(); 2.document.getElementById("").style.color="red";//sytle.font ...

  9. python3笔记六:for语句

    一:学习内容 for语句 二:for-in语句 1. 格式 for 变量名 in 集合:    语句 2.逻辑 按顺序取集合中的每个元素赋值给变量,再去执行语句,如此循环往复 3.举例 for i i ...

  10. Vue可自定义tab组件

    在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间.     如何 ...