题解:BSGS

问题:map空间

  BSGS判无解 a%p!=0
  0与最小非负整数 有区别
  函数传参类型转换int->long long long long ->int;
  费马小定理充分必要 性?

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<cmath>
using namespace std;
typedef long long Lint; int T,k;
Lint mm; map<Lint,int>ma; Lint ksm(Lint a,Lint p){
Lint ret=1;
for(;p;p>>=1,a=a*a%mm){
if(p&1)ret=ret*a%mm;
}
return ret;
} void gcd(Lint a,Lint b,Lint &d,Lint &x,Lint &y){
if(b==0){
d=a;x=1;y=0;
}else{
gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
} int main(){
scanf("%d%d",&T,&k);
while(T--){
if(k==1){
Lint a,p;
scanf("%lld%lld%lld",&a,&p,&mm);
printf("%lld\n",ksm(a,p));
}
if(k==2){
Lint a,c,b,x0,y0,d;
scanf("%lld%lld%lld",&a,&c,&b);
gcd(a,b,d,x0,y0);
if(c%d!=0){
printf("Orz, I cannot find x!\n");
continue;
}else{
x0=c/d*x0;b=b/d;
printf("%lld\n",(x0%b+b)%b);
}
}
if(k==3){
Lint a,c,p;
scanf("%lld%lld%lld",&a,&c,&p);
Lint m=ceil(sqrt(p));
ma.clear();
int flag=0;mm=p;
Lint tmp=ksm(a,m);
if(a%p==0){
printf("Orz, I cannot find x!\n");
continue;
}
for(Lint x=c%p,i=0;i<=m;++i,x=x*a%p)ma[x]=i;
for(Lint x=tmp%p,i=1;i<=m;++i,x=x*tmp%p){
if(ma.count(x)&&(m*i-ma[x]!=0)){
printf("%d\n",m*i-ma[x]);
flag=1;
break;
}
}
if(!flag)printf("Orz, I cannot find x!\n");
}
}
return 0;
}

  

BZOJ:2242: [SDOI2011]计算器的更多相关文章

  1. bzoj 2242: [SDOI2011]计算器 BSGS+快速幂+扩展欧几里德

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

  2. BZOJ 2242: [SDOI2011]计算器( 快速幂 + 扩展欧几里德 + BSGS )

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

  3. BZOJ 2242: [SDOI2011]计算器 [快速幂 BSGS]

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

  4. bzoj 2242 [SDOI2011]计算器(数论知识)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  5. BZOJ.2242.[SDOI2011]计算器(扩展欧几里得 BSGS)

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

  6. BZOJ 2242 [SDOI2011]计算器(快速幂+Exgcd+BSGS)

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

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

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一道BSGS! 咳咳,我到底改了些什么?…… 感觉和自己的第一版写的差不多……可能是 ...

  8. BZOJ 2242 [SDOI2011]计算器 BSGS+高速幂+EXGCD

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

  9. bzoj 2242: [SDOI2011]计算器

    #include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...

  10. [原博客] BZOJ 2242 [SDOI2011] 计算器

    题目链接 noip级数论模版题了吧.让求三个东西: 给定y,z,p,计算`Y^Z Mod P` 的值. 给定y,z,p,计算满足`xy≡ Z ( mod P )`的最小非负整数. 给定y,z,p,计算 ...

随机推荐

  1. 096、Java中String类之手工入对象池操作

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  2. oracle,mysql,SqlServer三种数据库的分页查询

    MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...

  3. 用sql删除数据库重复的数据的方法

      /***********************************************两个意义上的重复记录:1.是完全重复的记录,也即所有字段均重复的记录,2.是部分关键字段重复的记录, ...

  4. git客户端出现libpng warning: iCCP: known incorrect sRGB profile

    在关闭gitk窗口的时候,会出现一系列的  libpng warning: iCCP: known incorrect sRGB profilelibpng warning: iCCP: known  ...

  5. 小程序列表循环出来的list是不同接口赋的值

    需求:首页有三个列表,样式形式都是一样的,可以循环展示,但是循环的内容list部分是来自于不同的三个接口. data: { indexList:[{ name: "中考体能突击营" ...

  6. zabbix java gateway配置实战案例

    zabbix java gateway配置实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署tomcat服务 博主推荐阅读: CentOS: https://www. ...

  7. 2-10 就业课(2.0)-oozie:12、cm环境搭建的基础环境准备

    8.clouderaManager5.14.0环境安装搭建 Cloudera Manager是cloudera公司提供的一种大数据的解决方案,可以通过ClouderaManager管理界面来对我们的集 ...

  8. Day6-T4

    原题目 Describe:差分约束模板题吧...LG上竟然是省选+ code: #include<bits/stdc++.h> #define INF 214748364 using na ...

  9. R WLS矫正方差非齐《回归分析与线性统计模型》page115

    rm(list = ls()) A = read.csv("data115.csv") fm = lm(y~x1+x2,data = A) coef(fm) A.cooks = c ...

  10. Java 的 String.split 函数,消除空字符串

    代码: String str = "the music made it hard to concentrate"; String delims = "[ ]+" ...