【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS
Description
Input
输入包含多组数据。
Output
Sample Input
3 1
2 1 3
2 2 3
2 3 3
【样例输入2】
3 2
2 1 3
2 2 3
2 3 3
【数据规模和约定】
对于100%的数据,1<=y,z,p<=10^9,为质数,1<=T<=10。
Sample Output
2
1
2
【样例输出2】
2
1
0
HINT
Source
#include <iostream>
#include <cstdio>
#include <cmath>
#include <map>
#define ll long long
using namespace std;
ll y,z,p; ll fast_pow(ll y,ll z,ll p)
{
ll ans=;
while (z)
{
if (z&) ans=ans*y%p;
y=y*y%p;
z>>=;
}
return ans;
} ll gcd(ll a,ll b)
{return b==?a:gcd(b,a%b);} void ex_gcd(ll a,ll b,ll &x,ll &y)
{
if (!b) {x=;y=;return;}
ex_gcd(b,a%b,x,y);
ll t=x; x=y; y=t-a/b*y;
} void solve1()
{
printf("%lld\n",fast_pow(y,z,p));
} void solve2()
{
ll d=gcd(y,p);
if (z%d) {printf("Orz, I cannot find x!\n");return;}
y/=d; z/=d;
ll a,b;
ex_gcd(y,p,a,b);
a=a*z%p;
while (a<) a+=p;
printf("%lld\n",a);
} void solve3()
{
y%=p,z%=p;
if (!y && !z) {puts(""); return;}
if (!y) {printf("Orz, I cannot find x!\n");return;}
map<ll,ll> mp;
mp.clear();
ll m=ceil(sqrt(p));
ll t=fast_pow(y,m,p),k=z%p;//直接m即可
for (int i=;i<m;i++)
{
if (!mp[k]) if (i) mp[k]=i;//注意变量,及时订正。
else mp[k]=-;
k=k*y%p;
}
k=;
for (int i=;i<m;i++)
{
if (mp[k])//注意!mp与mp的判断
{
if (mp[k]==-) mp[k]=;
printf("%lld\n",i*m-mp[k]);
return;
}
k=k*t%p;
}
printf("Orz, I cannot find x!\n");//各种傻
} int main()
{
int T,t;
scanf("%d%d",&T,&t);
while (T--)
{
scanf("%lld%lld%lld",&y,&z,&p);
if (t==) solve1();
if (t==) solve2();
if (t==) solve3();
}
}
【BZOJ2242】【SDoi2011】计算器 快速幂+EXGCD+BSGS的更多相关文章
- 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
1:快速幂 2:exgcd 3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...
- 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了好多次 ...
- BZOJ2242 [SDOI2011]计算器
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
污污污污 2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2312 Solved: 917 [Submit][S ...
- BZOJ2242[SDOI2011]计算器——exgcd+BSGS
题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给定y,z,p, ...
- bzoj2242: [SDOI2011]计算器 BSGS+exgcd
你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值:(快速幂) 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数:(exgcd) 3.给 ...
- BZOJ2242 [SDOI2011]计算器 【BSGS】
2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 4741 Solved: 1796 [Submit][Sta ...
随机推荐
- Web框架之Tornado
概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...
- <转>JDBC获取DB元数据
原文链接:http://jiauwu.iteye.com/blog/1307617 package com.util.jdbc; import java.sql.Connection; import ...
- Solr入门之(2)快速启动:第一个例子
Solr作为一个web应用来启动,因此需要JDK支持,需要WEB容器,本文环境如下: JDK6.0或以上(环境变量设置等不再赘述) Tomcat-6.0.35或以上(自行下载) apache-solr ...
- HDU 4005 The war Tarjan+dp
The war Problem Description In the war, the intelligence about the enemy is very important. Now, o ...
- hdu 1203 概率+01背包
I NEED A OFFER! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- nefu 197 KMP
Description 在信息检索系统中一个很重要的环节就是关键字符串的查找,从而很多对自己有用的信息.给你一个很长的一段文字, 和一个关键信息字符串,现在要你判断这段文字里面是否有关键字符串. In ...
- hdu2546 01背包
http://acm.split.hdu.edu.cn/showproblem.php?pid=2546 01背包问题,首先拿出5元买最贵的东西,那接下来就是背包容量m-5,物品数量n-1 的01背包 ...
- POJ 3450 后缀数组/KMP
题目链接:http://poj.org/problem?id=3450 题意:给定n个字符串,求n个字符串的最长公共子串,无解输出IDENTITY LOST,否则最长的公共子串.有多组解时输出字典序最 ...
- [工作中的设计模式]建造者模式builder
一.模式解析 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心. 以上是对建造者模式的官方定义,简单说就是对于复杂对象 ...
- Y86模拟器安装
Y86模拟器安装 这周需要学习Y86下的指令集开发,Y86和x86可以说是孪生兄弟,但是还是存在着一些小的差别.接下来介绍如何进行linux-debian平台下的Y86模拟器安装. 虚拟机VMware ...