第一问快速幂板子

第二问把式子转化为\( xy\equiv Z(mod\ P)\rightarrow xy+bP=z \),然后扩展欧几里得

第三问BSGS板子

#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
long long T,K,y,z,p;
map<long long,long long>mp;
long long gcd(long long a,long long b)
{
return !b?a:gcd(b,a%b);
}
long long ksm(long long a,long long b,long long p)
{
long long r=1ll;
a%=p;
while(b)
{
if(b&1)
r=r*a%p;
a=a*a%p;
b>>=1;
}
return r;
}
void exgcd(long long a,long long b,long long &x,long long &y)
{
if(!b)
{
x=1,y=0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
int main()
{
scanf("%lld%lld",&T,&K);
while(T--)
{
scanf("%lld%lld%lld",&y,&z,&p);
if(K==1)
printf("%lld\n",ksm(y,z,p));
else if(K==2)
{
//p=-p;
long long t=gcd(y,p);
if(z%t)
{
puts("Orz, I cannot find x!");
continue;
}
y/=t,z/=t,p/=t;
long long xx,yy;
exgcd(y,p,xx,yy);
printf("%lld\n",(xx*z%p+p)%p);
}
else
{
y%=p;
if(!y&&!z)
{
puts("1");
continue;
}
if(!y)
{
puts("Orz, I cannot find x!");
continue;
}
mp.clear();
long long m=ceil(sqrt(p)),t=1;
mp[1]=m+1;
for(long long i=1;i<m;i++)
{
t=t*y%p;
if(!mp[t])
mp[t]=i;
}
long long tmp=ksm(y,p-m-1,p),now=1,f=0;
for(long long k=0;k<m;k++)
{
long long i=mp[z*now%p];
if(i)
{
if(i==m+1)
i=0;
printf("%lld\n",k*m+i);
f=1;
break;
}
now=now*tmp%p;
}
if(!f)
puts("Orz, I cannot find x!");
}
}
return 0;
}

最新文章

  1. C-RAN 集中化、协作化、云化、绿色节能(4C)
  2. 【腾讯Bugly干货分享】深度学习在OCR中的应用
  3. linux安装locust
  4. repeater单双行颜色不同,gridview repeater DataList 鼠标经过改变背景颜色
  5. Linux下配置ip地址四种方法
  6. oracle 中的存储过程
  7. UVa (二分) 11627 Slalom
  8. Redirect
  9. 详解PHP的__set()、__get()、__isset()、unset()四个方法
  10. 用JSON 和 Google 实现全文翻译
  11. 函数模板的载体-HPP
  12. Java 基础 标识符的命名
  13. linux 系统下apache 找不到apxs 文件
  14. Mock.js的简单使用
  15. sas infile 控制导入长度
  16. PHP filter 函数FILTER_CALLBACK 过滤数据
  17. 愿Linux红帽旋风吹得更加猛烈吧!
  18. Java设计模式(8)组合模式(Composite模式)
  19. 评论抓取:Python爬取微信在APPStore上的评论内容及星级
  20. visualstudio部分快捷键

热门文章

  1. POJ 2484 A Funny Game【博弈】
  2. React学习及实例开发(一)——开始
  3. 如何使用eclipse for c/c++ 配置环境编写第一个C程序
  4. JAVA_构造方法
  5. Go --- 设计模式(工厂模式)
  6. 【C++基础 02】深拷贝和浅拷贝
  7. java.util.MissingResourceException: Can't find resource for bundle oracle.sysman.db.rsc.LoginResourc
  8. [Angular] Refactor Angular Component State Logic into Directives
  9. Linux性能诊断工具
  10. 【Android开发-4】进入实践,最喜欢折腾的计算器