bzoj 2242 [SDOI2011]计算器——BSGS模板

时间:2023-02-24 22:01:14

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242

第一道BSGS!

咳咳,我到底改了些什么?……

感觉和自己的第一版写的差不多……可能是long long还有%C的位置的缘故?

不过挺欣赏这个板子的。把它记下来好了。

其讲解:https://blog.csdn.net/clove_unique/article/details/50740412

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<cmath>
#define ll long long
using namespace std;
ll T,type,A,B,C,x,y;
map<ll,ll> mp;
ll pw(ll x,ll k,ll mod)
{
ll ret=;while(k){if(k&)ret=ret*x%mod;x=x*x%mod;k>>=;}return ret;
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){x=;y=;return;}
exgcd(b,a%b,y,x);y-=a/b*x;
}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll solve3()
{
A%=C;B%=C;
if(!A)
{
if(!B)return ;else return -;
}
mp.clear();ll m=ceil(sqrt(C)),t;
for(ll i=;i<=m;i++)
{
if(!i){t=B%C;mp[t]=i;continue;}
t=t*A%C;mp[t]=i;// if cover the previous one,it's correct
}
t=pw(A,m,C);ll ans=t;
for(ll i=;i<=m;i++)
{
if(mp[ans])return (i*m%C-mp[ans]%C+C)%C;//%C的位置
ans=ans*t%C;
}
return -;
}
int main()
{
scanf("%lld%lld",&T,&type);
while(T--)
{
scanf("%lld%lld%lld",&A,&B,&C);
if(type==)
{
B%=(C-);
printf("%lld\n",pw(A,B,C));
}
if(type==)
{
ll g=gcd(A,C);//ll g
if(B%g){printf("Orz, I cannot find x!\n");continue;}
A/=g;C/=g;B/=g;
exgcd(A,C,x,y);
printf("%lld\n",(x*B%C+C)%C);//多%一个C
}
if(type==)
{
ll ans=solve3();
if(ans==-)printf("Orz, I cannot find x!\n");
else printf("%lld\n",ans);
}
}
return ;
}

bzoj 2242 [SDOI2011]计算器——BSGS模板的更多相关文章

  1. bzoj 2242&colon; &lbrack;SDOI2011&rsqb;计算器 BSGS&plus;快速幂&plus;扩展欧几里德

    2242: [SDOI2011]计算器 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 你被 ...

  2. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器 BSGS&plus;高速幂&plus;EXGCD

    题意:id=2242">链接 方法: BSGS+高速幂+EXGCD 解析: BSGS- 题解同上.. 代码: #include <cmath> #include <c ...

  3. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器 &vert; BSGS

    insert的时候忘了取模了-- #include <cstdio> #include <cmath> #include <cstring> #include &l ...

  4. bzoj 2242&colon; &lbrack;SDOI2011&rsqb;计算器 &amp&semi; BSGS算法笔记

    这题的主要难点在于第三问该如何解决 于是就要知道BSGS是怎样的一种方法了 首先BSGS是meet in the middle的一种(戳下面看) http://m.blog.csdn.net/blog ...

  5. BZOJ 2242&colon; &lbrack;SDOI2011&rsqb;计算器&lpar; 快速幂 &plus; 扩展欧几里德 &plus; BSGS &rpar;

    没什么好说的... --------------------------------------------------------------------- #include<cstdio&g ...

  6. BZOJ 2242&colon; &lbrack;SDOI2011&rsqb;计算器 &lbrack;快速幂 BSGS&rsqb;

    2242: [SDOI2011]计算器 题意:求\(a^b \mod p,\ ax \equiv b \mod p,\ a^x \equiv b \mod p\),p是质数 这种裸题我竟然WA了好多次 ...

  7. BZOJ&period;2242&period;&lbrack;SDOI2011&rsqb;计算器&lpar;扩展欧几里得 BSGS&rpar;

    同余方程都不会写了..还一直爆int /* 2.关于同余方程ax ≡b(mod p),可以用Exgcd做,但注意到p为质数,y一定有逆元 首先a%p=0时 仅当b=0时有解:然后有x ≡b*a^-1( ...

  8. BZOJ 2242 &lbrack;SDOI2011&rsqb;计算器(快速幂&plus;Exgcd&plus;BSGS)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2242 [题目大意] 给出T和K 对于K=1,计算 Y^Z Mod P 的值 对于K=2 ...

  9. bzoj 2242 &lbrack;SDOI2011&rsqb;计算器 快速幂&plus;扩展欧几里得&plus;BSGS

    1:快速幂  2:exgcd  3:exbsgs,题里说是素数,但我打的普通bsgs就wa,exbsgs就A了...... (map就是慢)..... #include<cstdio> # ...

随机推荐

  1. Android进程间通讯

    最近研究了一下Android进程间通讯,原来只是会用,但是只是会用是不行滴,就来研究一下. 刚开始看的时候,我的头是这么大,看了一夜的时候,头就变成这样了,,吓得宝宝赶紧上床休息了,. 先喝喝茶讲个故 ...

  2. google开发者可以在中国访问啦!!!!

    google开发者已经可以在中国访问了,只是好多内容还是不能访问的,例如Chrome

  3. mybatis 简单使用示例(单独使用):

    mybatis的单独使用简单示例: 步骤1: 新建xml文件. 示例: <?xml version="1.0" encoding="UTF-8" ?&gt ...

  4. unix&sol;linux中图形界面那些事

    我们知道unix/linux刚开始的时候是没有图形界面的,随着时代的发展,排版.制图.多媒体应用越来越普遍了,这些需求都需要用到图形界面(Graphical User Interface).为此,MI ...

  5. spring全注解项目

    项目结构如下: spring配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  6. C&num;系列教程——lock语句定义及使用

    代码如下: using System; using System.Threading; class Thread_Test { public void Run() { Console.WriteLin ...

  7. Selenium webdriver定位iframe里面元素两种方法

    以东方财富网登录页面为例: 在查找元素过程中,直接通过id或者xpath等找不到元素,查看页面源代码发现元素是属于iframe里,例如: <div class="wrap_login& ...

  8. C&num; 类如何声明索引器以提供对类的类似数组的访问的代码

    研发期间,将内容过程中比较常用的内容段做个收藏,如下内容内容是关于 C# 类如何声明索引器以提供对类的类似数组的访问.的内容,希望能对各位有用处. using System;using System. ...

  9. java面试题复习(七)

    61.jdbc的操作步骤 加载驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); 创建连接:Connection con =D ...

  10. C&sol;S模型之TCP协议

    服务端: // WSASever.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <WinSock2.h> # ...