A^X mod P 山东省赛,打表求解

给一个链接:http://acm.upc.edu.cn/problem.php?id=2219

就是给一个公式,求冪取余。

拿到则这个题的时候,感觉挺简单的,n的范围是10^6,而qmod的复杂度为log2 N=30左右,所以,应该不会TLE吧,可惜还是TLE了。

反正我是想不到这种方法了。因为我以为, 时间复杂度已经到达极限了,想不到qmod的复杂度还可以通过打表降为O(1)。

实际上就相当于一个Dp问题了。

对此题:

设:A^N=A^(k*x+y)。即:N=k*x+y,x=N/k,y=N%k。由于N为10^9,所以,k取33333左右就可以了,这样x和y的取值都不超过33333了。

则快速幂变成了:A^N mod P=A^(k*x+y) mod P=(A^(k*x) * A^y )mod P=(A^(k*x) mod P * (A^y) mod P) mod P。由于A,k,P都是定值,则A^N mod P 的值只取决于x和y。分别用dpx和dpy来记录A^(k*x) mod P和A^y mod P,则又可得到:

A^N

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值