BZOJ 2242 计算器
Description
你被要求设计一个计算器完成以下三项任务:
\(1.\)给定\(y,z,p\),计算\(y^{z}\;mod\;P\)的值;
\(2.\)给定\(y,z,p\),计算满足\(xy \equiv z\;mod\;P\)的最小非负整数;
\(3.\)给定\(y,z,p\),计算满足\(y^{x} \equiv z\;mod\;P\)的最小非负整数。
Input
输入包含多组数据。
第一行包含两个正整数\(T,K\)分别表示数据组数和询问类型(对于一个测试点内的所有数据,询问类型相同)。
以下行每行包含三个正整数\(y,z,p\),描述一个询问。
Output
对于每个询问,输出一行答案。对于询问类型\(2\)和\(3\),如果不存在满足条件的,则输出“Orz, I cannot find x!”,注意逗号与“I”之间有一个空格。
Sample Input
3 1
2 1 3
2 2 3
2 3 3
Sample Output
2
1
2
Hint
对于\(100\%\)的数据,\(1 \le y,z,P \le 10^{9}\),\(P\)为质数,\(1 \le T \le 10\)。
数论裸题合集:快速幂,扩展欧几里得,bsgs。
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<map>
using namespace std;
typedef long long ll;
int kind; ll ans;
inline ll qsm(ll a,ll b,ll c)
{
ll ret = 1;
for (;b;b >>= 1,(a *= a) %= c)
if (b & 1) (ret *= a) %= c;
return ret;
}
inline int gcd(int a,int b)
{
if (!b) return a;
return gcd(b,a%b);
}
inline ll bsgs(int a,int b,int c)
{
int i,t = 1;
for (i = 0;i<=50;i++)
{
if (t == b) return i;
t = (ll)t*(ll)a% c;
}
int tmp = 1,k = 1;
t = 1;
while (tmp = gcd(a,c),tmp!=1)
{
if (b % tmp) return -1;
c /= tmp; k++; b /= tmp;
t = (ll)t*(ll)a/tmp%c;
}
int m = (int)sqrt(c+0.5);
map <int,int> hash; hash[1] = 0;
int f = 1;
for (i = 1;i<m;i++)
{
f = (ll)f * (ll)a % c;
hash[f] = i;
}
f = (ll)f*(ll)a%c;
b = qsm(t,c-2,c)*(ll)b%c;
int mod = qsm(f,c-2,c);
for (i = 0;i<m;i++)
{
if (hash.count(b)) return i*m+hash[b]+k-1;
b = (ll)b * (ll)mod % c;
}
return -1;
}
int main()
{
freopen("2242.in","r",stdin);
freopen("2242.out","w",stdout);
int T; scanf("%d %d",&T,&kind);
while (T--)
{
int y,z,p;
scanf("%d %d %d",&y,&z,&p);
if (kind == 1) ans = qsm(y,z,p);
else if (kind == 2)
{
y %= p,z %= p;
int d = gcd(y,p);
if (z % d != 0) ans = -1;
else
{
y /= d, p /= d,z /= d;
ans = z*qsm(y,p-2,p)%p;
}
}
else ans = bsgs(y,z,p);
if (ans >= 0) printf("%lld\n",ans);
else printf("Orz, I cannot find x!\n");
}
fclose(stdin); fclose(stdout);
return 0;
}
BZOJ 2242 计算器的更多相关文章
- bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...
- BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )
没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...
- BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]
2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...
- 【BZOJ 2242】[SDOI2011]计算器
Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...
- bzoj 2242 [SDOI2011]计算器(数论知识)
Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...
- [BZOJ 2242] [SDOI 2011] 计算器
Description 你被要求设计一个计算器完成以下三项任务: 给定 \(y,z,p\),计算 \(y^z \bmod p\) 的值: 给定 \(y,z,p\),计算满足 \(xy≡ z \pmod ...
- BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)
同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...
- BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2242 [题目大意] 给出T和K 对于K=1,计算 Y^Z Mod P 的值 对于K=2 ...
- bzoj 2242 [SDOI2011]计算器——BSGS模板
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...
随机推荐
- 假设但是学习java入门,请离开SSH稍远
我觉得有点累了步行上班,我想买一辆自行车.结果去了一看,想2500片.旁边的人说,2500所有最好加一些钱,买一挖电. 遂问电动车价格,3500,决定买.却被告知不如加点钱买小踏板摩托划算.于是看摩托 ...
- 偷偷mark下一个
java书单 thinking in java java战 Effective Java 深入了解JVM虚拟机 java性能优化权威指南 JSR133 Google Guava官方教程 版权声明:本文 ...
- Linux 精准获取进程pid--转
如果想在脚本里只获取PID,那么可以用如下脚本.目前收集两种方法: 方法一 $ps x|grep xxx |awk '{print $1}' e.g. ps x|grep java |awk '{p ...
- iOS 应用性能测试的相关方法、工具及技巧
用户不喜欢等待.他们不关心也不应该关心一个应用初始化的时候需要什么,他们只想尽快地完成他们的任务.你的应用应该几乎是瞬间启动的,其界面应当如丝般顺滑.在充满竞争的软件市场中,应用的性能是关键的优势之一 ...
- runtime重写description方法打印model属性和值
在开发过程中, 往往会有很多的model来装载属性. 而在开发期间经常会进行调试查看model里的属性值是否正确. 那么问题来了, 在objective-c里使用NSLog("%@" ...
- android本地定时通知
android本地通知略有不同,分为立即触发和延时触发 1.即时通知 android默认的Notification为立即触发 Intent intent = new Intent(Intent.ACT ...
- Spring定时任务,Spring4整合quartz2.2,quartz-scheduler定时任务
Spring4整合quartz2.2,quartz-scheduler定时任务,Spring定时任务 >>>>>>>>>>>>& ...
- Summary: How to calculate PI? Based on Monte Carlo method
refer to: http://www.stealthcopter.com/blog/2009/09/python-calculating-pi-using-random-numbers/ Duri ...
- 用Module元素实现SharePoint Webpart Page的自动生成
最近研发的项目中开发了很多的WebPart,每次部署这些WebPart到新环境中总是很麻烦,因为自己要新创建WebpartPage,同时还要把这些WebPart放到指定的WebPart页中去: 为了方 ...
- ListView优化分页优化
缘由 我们在用ListView展现数据的时候.比如展现联系人,如果联系人太多就会出现卡的现象,比如如果有1000多条数据,从数据库里查询,然后装载到List容器这段时间是比较耗时的.虽然我们可以用as ...