码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ-2242--计算器-SDOI2011

时间:2015-03-20 14:27:58      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:bsgs

描述

你被要求设计一个计算器完成以下三项任务:
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)的最小非负整数。


分析

  • 第一问快速幂
  • 第二问线性模方程. x = z * inv(y) (mod p), 求逆元可以用费马小定理.

    yp?11(modp)
    y?yp?2=yp?11(modp)

    如果y和p不互质无解.

  • 重点是第三问吧, BSGS. 离散对数算法.
    设 x = km + i =>

    ykm+i=ykm?yiz(modp)

    =>yiz?(ykm)?1(modp)

    =>yiz?(y(k?1)m)?1?(ym)?1(modp)

    =>yiz?(y(k?1)m)?1?yp?1?m(modp)

  • 预处理出y^i, 存到map的哈希表里. 然后取m = sqrt(p), 枚举k, 找到最小的k使得上式成立, 则 x = km+i.

代码

https://code.csdn.net/snippets/623705

BZOJ-2242--计算器-SDOI2011

标签:bsgs

原文地址:http://blog.csdn.net/qq_21110267/article/details/44490677

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!