bzoj 2242: [SDOI2011]计算器【扩展欧几里得+快速幂+BSGS】
2024-09-30 09:59:01
第一问快速幂板子
第二问把式子转化为\( 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;
}
最新文章
- C-RAN 集中化、协作化、云化、绿色节能(4C)
- 【腾讯Bugly干货分享】深度学习在OCR中的应用
- linux安装locust
- repeater单双行颜色不同,gridview repeater DataList 鼠标经过改变背景颜色
- Linux下配置ip地址四种方法
- oracle 中的存储过程
- UVa (二分) 11627 Slalom
- Redirect
- 详解PHP的__set()、__get()、__isset()、unset()四个方法
- 用JSON 和 Google 实现全文翻译
- 函数模板的载体-HPP
- Java 基础 标识符的命名
- linux 系统下apache 找不到apxs 文件
- Mock.js的简单使用
- sas infile 控制导入长度
- PHP filter 函数FILTER_CALLBACK 过滤数据
- 愿Linux红帽旋风吹得更加猛烈吧!
- Java设计模式(8)组合模式(Composite模式)
- 评论抓取:Python爬取微信在APPStore上的评论内容及星级
- visualstudio部分快捷键
热门文章
- POJ 2484 A Funny Game【博弈】
- React学习及实例开发(一)——开始
- 如何使用eclipse for c/c++ 配置环境编写第一个C程序
- JAVA_构造方法
- Go --- 设计模式(工厂模式)
- 【C++基础 02】深拷贝和浅拷贝
- java.util.MissingResourceException: Can't find resource for bundle oracle.sysman.db.rsc.LoginResourc
- [Angular] Refactor Angular Component State Logic into Directives
- Linux性能诊断工具
- 【Android开发-4】进入实践,最喜欢折腾的计算器