光速幂

这个。。。。。。
这个算法好强啊。
给定P,给出T个q,对这T个询问求出 P q ( m o d M ) P^q \pmod M Pq(modM) , T &lt; = 5 ∗ 1 0 7 , q &lt; = 1 0 10 T&lt;=5*10^7,q&lt;=10^{10} T<=5107,q<=1010
首先你得要一个 f r e a d fread fread的读入优化。
然后发现快速幂会T。
别急,这里有个自诩光速幂的算法:
S = q m a x = 1 0 5 S = \sqrt {q_{max}} = 10^5 S=qmax =105
然后预处理 P k , k ∈ [ 1 , S ] P^k,k \in [1,S] Pk,k[1,S]
P k , k = i S , i ∈ N P^k,k = iS , i \in N Pk,k=iS,iN
然后对于 q = k S + l q = kS + l q=kS+l
就可以直接分成两个数相乘了。 O ( 1 ) O(1) O(1)
然后你会发现 P q P^q Pq是有循环节的,然后,没有了。

Luogu P5110 块速递推

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值