【快速幂】【扩展欧几里德】【BSGS】【SDOI 2011】【bzoj 2242】计算器

75、1565:【例 1】营业额统计(2020.02.11)-A.pdf 75、1565:【例 1】营业额统计(2020.02.11)-A 立即下载

2242: [SDOI2011]计算器

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 2077  Solved: 812

Description

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

Input

输入包含多组数据。

第一行包含两个正整数T,K分别表示数据组数和询问类型(对于一个测试点内的所有数据,询问类型相同)。
以下行每行包含三个正整数y,z,p,描述一个询问。

Output

对于每个询问,输出一行答案。对于询问类型2和3,如果不存在满足条件的,则输出“Orz, I cannot find x!”,注意逗号与“I”之间有一个空格。

Sample Input

【样例输入1】

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

【样例输出1】

2
1
2

【样例输出2】

2
1
0

题解:

1.快速幂。
2.扩展欧几里德。
3.BSGS,大家应该都会吧。。吾不言。
不会的可以看这里——>写的好啊!

Code:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
#define N 100100
#define LL long long
map<LL,LL> hash;
int in(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar();
    while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
    return x;
}
LL qp(LL x,LL y,LL p){
    LL z=1;
    while (y){
        if (y&1) z=(z*x)%p;
        x=(x*x)%p; y>>=1;
    }
    return z;
}
void work1(int y,int z,int p){
    printf("%lld\n",qp(y,z,p));
}
LL gcd(LL x,LL y){
    if (!y) return x;
    return gcd(y,x%y);
}
void exgcd(LL a,LL b,LL &x,LL &y){
    if (!b){
        x=1,y=0;
        return;
    }
    exgcd(b,a%b,x,y);
    LL k=x; x=y;
    y=k-a/b*y;
}
void work2(int y,int z,int p){
    LL w=gcd(y,p);
    if (z%w){
        printf("Orz, I cannot find x!\n");
        return;
    }
    LL x,k; exgcd(y,p,x,k);
    x=x*z/w; x=(x+p)%p;
    while (x<0) x+=p;
    printf("%lld\n",x);
}
void work3(int y,int z,int p){
    y%=p,z%=p; hash.clear();
    if (!y && !z){
        printf("1\n");
        return;
    }
    if (!y){
        printf("Orz, I cannot find x!\n");
        return;
    }
    LL pp=ceil(sqrt(p)),v=qp(y,p-pp-1,p),k=1;
    hash[1]=pp+1;
    for (LL i=1; i<=pp; i++){
        k=(k*y)%p;
        if (!hash[k]) hash[k]=i;
    }
    LL ans=-1;
    for (LL i=0; i<pp; i++){
        LL j=hash[z];
        if (j){
            if (j==pp+1) j=0;
            ans=(i*pp+j);
            break;
        }
        z=(z*v)%p;
    }
    if (ans==-1) printf("Orz, I cannot find x!\n");
    else printf("%lld\n",ans);
}
int main(){
    int T=in(),k=in();
    while (T--){
        int y=in(),z=in(),p=in();
        if (k==1) work1(y,z,p);
        else if (k==2) work2(y,z,p);
        else work3(y,z,p);
    }
    return 0;
}
数论题解:「BZOJ1053」反素数/「Violet5」樱花 「BZOJ1053」反素数/「Violet5」樱花 详细题解 立即下载

相关推荐

乘法逆元(扩展欧几里得算法)

加密解密的基础,扩展欧几里得算法(辗转相除法)

1565:营业额统计(平衡树)

注意:以下代码最后一个点会 T,输入改成快读应该可以过 const int N=5e5+5; int n,m,t; int i,j,k; int a[N]; struct Node { int l,r; int fa,prl,val; //父节点,优先级,值 }node[N]; int root=0,tree=0; //根,节点个数 void zig(int &x) //右旋 { ...

C_Dreamy的博客 752

欧几里得计算器/辗转相除法计算器(带过程)

一个小小的exe文件,其中是我在学习网络安全数学期间编写的欧几里得除法/辗转相除法计算器。 也就是根据两个互素的整数a和b,通过辗转相除法算出两个整数s,t,使得sa+tb=1。

BZOJ 1588: [HNOI2002]营业额统计

普通的,普通的平衡树,普通的小水题 用set水过(不过据说数据有问题。。。读入有一组少一行) #include #include #include #define inf 0x3f3f3f3f using namespace std; set tree; int read(){ char ch=getchar(); int x=0,f=1; while(ch'9'){if(ch=='-

Doleful Aria 548

人工智能-CS188 Project 2: Multi-agents

一、项目介绍 项目介绍网页 项目代码下载 本项目是采用Berkeley的CS188课程内容实习二的内容,在这个项目中,我们将为经典版本的Pacman 设计自动算法,包括幽灵。在此过程中,我们将实现 minimax 和 expectimax 搜索并尝试评估函数设计 完成作业只需要完成5个题目,按照项目介绍的步骤进行完成,主要是在multiAgents.py文件中进行补充代码 二、代码详情 1、Question1:Reflex Agent 略 2、Question2:Minimax 套用ppt上的minm

xiten的博客 8285

2023最新版kali安装教程

2023最新版kali安装教程 打开kali官网(https://www.kali.org/),下载kali镜像

qq_46346209的博客 2万+

牛客——[SDOI2011]计算器(快速幂+扩展欧几里得+BSGS)

链接:https://ac.nowcoder.com/acm/problem/20347 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 你被要求设计一个计算器完成以下三项任务: 1、给定y,z,p,计算Y^Z Mod P 的值; 2、给定y,z,p,计算满...

lgz0921的博客 988

Qt制作大数据可视化大屏展示电子看板

Qt制作大数据可视化大屏展示电子看板 解决当前最火的大数据可视化大屏展示,整个项目通过Qt开发,集成了QML/QChart/ECharts及自定义控件等模块,所有的可视化控件都可以集成到其中。可以随意增加和减少模块,各个模块可以随意拖拽,整体可以个性化布局。模块标题栏可自定义,包括标题文本信息、文本颜色、宽度/高度、背景颜色、按钮个数等功能,满足各个样式需求。 实例中主要展示了现成的一些仪表盘...

Qt自定义控件及应用开发 7707

信息学奥赛一本通 提高篇 第6章 平衡树Treap

随笔分类 - 动态规划——树形动态规划 动态规划——树形动态规划 - 随笔分类 - 符拉迪沃斯托克 - 博客园 平衡树 Treap 平衡树_百度百科 平衡树——treap - genius777 - 博客园 平衡树及笛卡尔树讲解(旋转treap,非旋转treap,splay,替罪羊树及可持久化) - The_Virtuoso - 博客园 【数据结构】【平衡树】浅析树堆Treap 【数据结构】【平衡树】浅析树堆Treap - Reddest - 博客园 简析平衡树(二)——Treap_

青少年趣味编程 470

避开STM32H7的‘保护陷阱’:从Option Byte机制深度解析读写保护原理与预防

本文深度解析STM32H723VGT6的Option Byte保护机制,详细讲解RDP读保护和WRP写保护的工作原理及配置方法,并提供硬件设计防御策略和软件预防性编程技巧,帮助开发者避免误触发保护机制导致芯片锁定的问题。

weixin_33686714的博客 442

基于sklearn实现LDA主题模型(附实战案例)

目录LDA主题模型1.LDA主题模型原理2.LDA主题模型推演过程3.sklearn实现LDA主题模型(实战)3.1数据集介绍3.2导入数据3.3分词处理 3.4文本向量化3.5构建LDA模型3.6LDA模型可视化 3.7困惑度 其实说到LDA能想到的有两个含义,一种是线性判别分析(Linear Discriminant Analysis),一种说的是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。 现在讨论的是主题模型

m0_64336780的博客 2万+

bzoj 2242: [SDOI2011]计算器【扩展欧几里得+快速幂+BSGS】

第一问快速幂板子 第二问把式子转化为\( xy\equiv Z(modP)\rightarrow xy+bP=z \),然后扩展欧几里得 第三问BSGS板子 #include<iostream> #include<cstdio> #include<map> #include<cmath> using namespace std; long long...

weixin_30951389的博客 144

Experion PKS系列开发:I_O模块_ExperionPKS与第三方I-O模块的集成

通过上述步骤,可以成功将第三方I/O模块集成到Honeywell Experion PKS系统中,实现对现场设备的监视和控制。集成过程中需要注意选择合适的第三方模块,配置正确的通信参数,编写正确的控制逻辑,并进行充分的测试,以确保系统的稳定性和可靠性。不同的通信协议(如Modbus、Profibus、Ethernet/IP、CANopen、OPC UA)有其独特的配置和编程方法,但总体流程相似。在实际应用中,根据项目需求选择合适的协议和模块,可以有效提高系统的灵活性和适应性。

zhubeibei168的博客 1103

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

没什么好说的...---------------------------------------------------------------------#include<cstdio>#include<cmath>#include<map>using namespace std;typedef long long ll;int MOD;void gc...

weixin_30908649的博客 80

Unity Hololens2开发|(三)工程发布及真机部署(3种方法)

选择项目->属性,进入项目属性页,选择调试,将HoloLens2的IP地址填写至页面,如下图。确保HoloLens2与计算机在同一网络下,并保持开启状态,点击运行,即开始生成部署.注意:该方式不支持覆盖安装,如果重复安装同一个App,需要先卸载再安装!选择Release下的ARM64,选择远程计算机,如下图。

游戏开发小Y的博客 14万+

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error 解决方式: 1.qt程序不要放在共享目录下编译,直接拷贝到ubuntu系统中编译 2.修改/home/xt/Qt5.12.1/5.12.1/android_armv7/mkspecs/android-clang中 #QMAKE_LINK = QMAKECXXQMAKE_CXX QMAKEC​XXQMAKE_CFLAGS -Wl,–exclude-libs,libgc

xt18971492243的博客 738

【bzoj2242】[SDOI2011]计算器 数论相关(快速幂+扩展欧几里得+BSGS)

2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2529 Solved: 1003 [Submit][Status][Discuss] Description 你被要求设计一个计算器完成以下三项任务: 1、给定y,z,p,计算Y^Z Mod P 的值; 2、给定y,z,p,计算满足xy≡ Z (

ATOD 1710

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

bzoj2242 : [SDOI2011]计算器 [BSGS算法]

第一次写一个比较高大上的数论题吧~~~虽然要花好长时间才明白一点,但是有收获吧~~对扩展欧几里得加深了理解。还认识了高大上的BSGS算法,哈哈~虽然还是一知半解,脑袋太小理解太慢,不易记住 上别人的题解吧~~~ 相关连接: BSGS算法_Baby steps giant steps算法(无扩展)详解 bzoj2242: [SDOI2011]计算器 && BSGS 算法  

Lin_disguiser的博客 637

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【SDOI2011】【BZOJ】【P2242】【计算器】【题解】【快速幂+扩展欧几里得+高次同余方程/BSGS】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2242 文献:http://blog.youkuaiyun.com/nike0good/article/details/9171173 http://blog.youkuaiyun.com/acm_cxlove/article/details/7831793 http://blog.youkuaiyun.com/nike0

退役狗的专栏 2457

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

bzoj 2242 [sdoi2011]计算器 (BSGS)

2242: [SDOI2011]计算器Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2337 Solved: 930 [Submit][Status][Discuss] Description你被要求设计一个计算器完成以下三项任务: 1、给定y,z,p,计算Y^Z Mod P 的值; 2、给定y,z,p,计算满足xy≡ Z ( mod

clover_hxy的博客 669

震惊!做了这题就会了快速幂+扩展欧几里德+bsgs(附扩展bsgs)

咳咳,玩了一回标题党哈~ 这神奇的题目就是—— codevs1565/洛谷P2485/bzoj2242【SDOI2011】计算器快速幂这个…..真的需要讲吗?已经在学扩展欧几里德和bsgs的oier应该是早就会快速幂的吧…… 其原理如下。 若y为偶数,则有xy=(xy/2)2x^y=(x^{y/2})^2 若y为奇数,则有xy=(xy/2)2∗xx^y=(x^{y/2})^2*x (y/

litble的成(tui)长(fei)史 1717

「一本通 4.6 例 1」营业额统计(YJF出版)

Tiger 最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某些时候营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。你的任务就是编写一个程序帮助 Tiger 来计算这一个值,第一天的最小波动值为第一天的营业额。

yjfyjfyjf54188的博客 404

营业额统计

营业额统计是基于折现图来展现,并且按照天来展示的。实际上,就是某一个时间范围之内的每一天的营业额。同时,不管光标放在哪个点上,那么它就会把具体的数值展示出来。并且还需要注意日期并不是固定写死的,是由上边时间选择器来决定。比如选择是近7天、或者是近30日,或者是本周,就会把相应这个时间段之内的每一天日期通过横坐标展示。营业额统计是商业活动中一个非常重要的环节,它可以帮助企业了解自身的经营状况,并为决策提供依据。基于可视化报表的折线图展示营业额数据,X轴为日期,Y轴为营业额。

Very_a的博客 527

营业额统计问题的三种巧妙解法

问题的简短描述:        给出n天的营业额,该天的最小波动值=min{|该天以前某一天的营业额-该天的营业额|} 。第一天的最小波动值为第一天的营业额。求n天的最小波动值之和。n详见:http://new.tyvj.cn/Problem_Show.aspx?id=1185 样例输入: 6 5 1 2 5 4 6 样例输出: 12 样例解释: 5+|1-5|+|2-1|+|5-5

LeanCloud-lzwjava 3437

扩展欧几里得

介绍扩展欧几里得算法之前,我们先介绍贝祖定理,即对任意整数a,ba,ba,b,那么一定存在整数x,yx,yx,y,使得ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)。 使用欧几里得算法(辗转相除法)我们可知:当到达递归边界时有b=0,a=gcd(a,b)b=0,a=gcd(a,b)b=0,a=gcd(a,b),我们可以得到一个式子a⋅1+b⋅0=gcd(a,b),x=1,y=0a·1+b·0=gcd(a,b),x=1,y=0a⋅1+b⋅0=gcd(a,b),x=1,y=

weixin_45652283的博客 361
上一篇: 【枚举】【SDOI 2011】【bzoj 2241】打地鼠
下一篇: 【线段树】【bzoj 3211】花神游历各国
morestep
博客等级 码龄12年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值