【bzoj】 - 2242 计算器 【BSGS】

HYSBZ - 2242


**

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)的最小非负整数。




没网了真是悲伤QAQ 【sisi上课把网断了TAT】

来说一下BSGS吧QAQ

觉得白皮上说的很清楚的QAQ 看一遍就明白了 这里总结一下吧【感觉就是还没回过神来就证明完了QAQ】

首先我们通过欧拉定理可以知道 我们需要试 0~p-1 这些数 【剩余系其实就可以知道 证:最多有n个剩余系【意思就是最多有p个数%p不同】 如果第p+1个数一定之前存在一个数和它相同 【其实就是抽屉原理】 然后就开始了之前那个数的循环 END】

所以我们有了一个范围了QAQ【有木有顿时好心安QAQ】

但是p最大是 1e9 不在我们的承受范围之内 ! 肿么办???

这里BSGS【大步小步定理 baby step, gaint step 】就派上用场了

首先我们随便找一个m 只要满足 m < p 【在最后我们在根据之间的推断选取一个较好的m】

我们先把1~m这些数试一下 如果有 就输出答案

否则!!
我们还要尝试一下后面的【QAQ】 【读者:woc……你不废话么……】

别急别急【QAQ】

我们先求出 y^m在(mod p)下的逆元 【读者:这么大怎么求】

费马是个好人啊 [233]

 **费马小定理 :
假如p是质数,若p不能整除a,则 a^(p-1) ≡1(mod p),若p能整除a,则a^(p-1) ≡0(mod p)**

证明

因为p是质数,且(a,p)=1,所以φ(p)=p-1。由欧拉定理可得a^(p-1) ≡1(mod p)【我记得当初是这么证来着 至于欧拉定理怎么证么……我怎么知道 QAQ  只是这里比较简洁  如果不知道欧拉定理 可以去百度搜费马小定理 那里应该没有涉及欧拉定理的知识】

所以y^m的逆元是 y^(p-m-1)  【因为两个相乘就是满足费马小定理的这种形式了=> m^(p-1) ≡1(mod p)】

OOOOOOOOOOOOOOO———我是分割线———OOOOOOOOOOOOOO

对于 一个x>m  我们这里设成 m+k 如果它满足题目条件的话 =>  Y^(m+k)≡ Z ( mod P)

我们在同余式两边同时乘 刚才求出的逆元 式子就变成了  Y^k≡ Z×(y^p-m-1) ( mod P)

这样 m+k 就变成了 k  如果k还是大于m的话 我们再乘以逆元 就不断变小 直到 k<m  所以我们可以保持式子左边不动  枚举右面的b 每次查询是否在1~m里有答案  否则就不断乘逆元 需要n/m次

前面是小步 后面是大步 先小步再大步 应该名字是这么来的吧

END
【貌似讲着讲着就乱了【捂脸】】

代码可以去看黄学长的QAQ 我的模板挂掉了TAT 调了好久好久……最后弃疗了TAT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值