题面

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. python起步--windows系统下安装python解释器和PyCharm

    参考教程: 1)https://www.runoob.com/w3cnote/pycharm-windows-install.html 2)https://blog.csdn.net/c_shell_ ...

  2. npm全局路径及cache路径设置

    1.网上安装node的教程很多,下载安装包,自定义路径安装即可: 2.安装完成node默认npm已安装,可以通过npm安装其他包.cmd命令分别  node -v    或 npm -v  可以查看安 ...

  3. Windows下安装jdk

    1. 下载安装包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. 双击e ...

  4. 分布式-信息方式-ActiveMQ的静态网络连接

                           ActiveMQ的静态网络连接 在一台服务器上启动多个Broker步骤如下:1:把整个conf文件夹复制一份,比如叫做conf22:修改里面的 activ ...

  5. C++入门经典-例3.20-使用continue跳出循环

    1:continue不是立即跳出循环体,而是跳过本次循环结束前的语句,回到循环的条件测试部分.代码如下: // 3.20.cpp : 定义控制台应用程序的入口点. // #include " ...

  6. js将伪数组转换为标准数组的多种方法

    在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合. 那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点: 按索引方式存储数据: 具有len ...

  7. shell脚本之awk、sed、grep案例

    1.BEGIN END用法user        DIR,内容显示用户名称.用户家目录   $NF为awk的内置变量,表示最后一行,$(NF-1)就表示倒数第二行,最后打印页脚 页眉显示 cat /e ...

  8. ffmpeg修复时间戳

    ffmpeg -re -i e:/media/baifa.mp4 -filter_complex -hls_wrap -hls_time d:/demo/hls/cctv13/playlist.m3u ...

  9. 自定义PopupWindow实现常用效果

    package com.loaderman.customviewdemo; import android.content.Context; import android.view.View; impo ...

  10. MQTT主题Topic讲解

    文章转载于https://www.cnblogs.com/hayasi/p/7792191.html 我们已经把相关的连接报文搞定了.笔者想来想去还是决定先讲解一下订阅报文(SUBSCRIBE ).如 ...