题面

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

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

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

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

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long KSM(long long a,long long b,long long p)
  4. {
  5. long long res=;
  6. while(b){
  7. if(b&) res=res*a%p;
  8. a=a*a%p;
  9. b/=;
  10. }
  11. return res%p;
  12. }
  13. void solve1(int t)
  14. {
  15. while(t--){
  16. long long y,z,p;
  17. cin>>y>>z>>p;
  18. printf("%lld\n",KSM(y,z,p)%p);
  19. }
  20. }
  21. long long d;
  22. void exgcd(long long a,long long b,long long &x,long long &y)
  23. {
  24. if(b==){
  25. x=;
  26. y=;
  27. d=a;
  28. return;
  29. }
  30. exgcd(b,a%b,y,x);
  31. y-=(a/b)*x;
  32. }
  33. void solve2(int t)
  34. {
  35. while(t--){
  36. long long y,z,p;
  37. cin>>y>>z>>p;
  38. long long ha,la;
  39. exgcd(y,p,ha,la);
  40. if(z%d!=){
  41. cout<<"Orz, I cannot find x!"<<endl;
  42. }
  43. else{
  44. cout<<(((z*ha/d)%p+p)%p+p)%p<<endl;
  45. }
  46. }
  47. }
  48. void BSGS(long long a,long long ans,long long p)
  49. {
  50. map<long long ,long long> Myhash;
  51. ans%=p;
  52. int tmp=sqrt(p)+;
  53. for(int i=;i<tmp;i++){
  54. Myhash[(ans*KSM(a,i,p))%p]=i;
  55. }
  56. a=KSM(a,tmp,p)%p;
  57. if(a==&&ans==){
  58. cout<<""<<endl;
  59. return;
  60. }
  61. if(a==&&ans!=){
  62. cout<<"Orz, I cannot find x!"<<endl;
  63. return;
  64. }
  65. for(int i=;i<=tmp;i++){
  66. if(Myhash.find(KSM(a,i,p))!=Myhash.end()&&(i*tmp-Myhash[KSM(a,i,p)]>=)){
  67. cout<<i*tmp-Myhash[KSM(a,i,p)]<<endl;
  68. return;
  69. }
  70. }
  71. cout<<"Orz, I cannot find x!"<<endl;
  72. }
  73. void solve3(int t)
  74. {
  75. while(t--){
  76. long long y,z,p;
  77. cin>>y>>z>>p;
  78. BSGS(y,z,p);
  79. }
  80. }
  81. int main()
  82. {
  83. int t,k;
  84. cin>>t>>k;
  85. if(k==){
  86. solve1(t);
  87. }
  88. else if(k==){
  89. solve2(t);
  90. }
  91. else solve3(t);
  92. }

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. Vue组件使用

    一.组件概念 有html模板,有css样式,有js逻辑的集合体 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的 ...

  2. fastdfs 中client.conf 文件

    # connect timeout in seconds# default value is 30sconnect_timeout=30              连接超时 # network tim ...

  3. 二分mid的取法

    二分的两种形式: 1.范围缩小时,r = mid,l = mid + 1,取中间值时,mid = (l + r) >> 1. 2.范围缩小时,l = mid,r = mid - 1,取中间 ...

  4. 17.Python print()函数高级用法

    前面使用 print() 函数时,都只输出了一个变量,但实际上 print() 函数完全可以同时输出多个变量,而且它具有更多丰富的功能. print() 函数的详细语法格式如下: print (val ...

  5. [CSP-S模拟测试]:迷宫(最短路)

    题目传送门(内部题123) 输入格式 输入文件的第一行为四个正整数$n,m,k,d$. 接下来$m$行,每行三个整数$u,v,w$,描述一条无向道路. 输入文件最后一行包含$k$个整数,为$p_0,p ...

  6. Alpha发布--美工+文案

    此作业对应要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8677 一.美工: 1.产品logo 2.原型页面展示 2.1 进入萌 ...

  7. div随窗口变化设置高度

    window.onscroll = function () { sc(); }; window.onresize = function () { sc(); }; window.onload = fu ...

  8. 怎么理解一个规模大且结构复杂的c工程源码

    很久以前,当要着手一个规模很大,结构复杂的c工程源码时,总是感觉无从下手.这个时候,一般google一下”XX源码分析“.当这个源码是很广泛使用的时,这样到也能得到不少启发:很不幸,经常要接触一些很少 ...

  9. Spring配置多个数据源,并实现数据源的动态切换转载)

    1.首先在config.properties文件中配置两个数据库连接的基本数据.这个省略了 2.在spring配置文件中配置这两个数据源: 数据源1 <!-- initialSize初始化时建立 ...

  10. kotlin之数组

    一.使用arrayOf函数定义可以存储任意值的数组 var arr1 = arrayOf(1,2,3,'a') println(arr1[3]) 二.使用arrayOfNulls函数定义数组 var ...