关于线性递推求逆元不同的写法
查看原帖
关于线性递推求逆元不同的写法
107568
Ayaka_T楼主2023/5/10 20:18

我们由题解知inv[i]≡−⌊pi⌋∗inv[p%i] (mod  p)inv[i]\equiv -\lfloor\frac{p}{i}\rfloor \ast inv[p\% i]\ (\mod p)

再经过一番推导,我们可以知道inv[i]=(p−p/i)∗inv[p%i]%p;inv[i] = (p - p / i) \ast inv[p \% i] \% p;

我们可以知道inv[i]inv[i]是属于00到p−1p-1的

不过我们可以发现inv[i]inv[i]不可能等于00

证明(?):

假设之前的的invinv都不等于00,对于inv[i]inv[i]来说当且仅当(p−p/i)(p-p/i)或者之前的invinv为pp或00才会使得现在的invinv为00

因为n<=pn<=p,且ii从22开始枚举,所以前面一项显然不为00,也不为pp

根据题目条件以及假设,后面一项也不会为00或pp

所以我们可以知道inv[i]inv[i]是属于11到p−1p-1的

我们考虑另一种方法,先直接对后面的取模,也就是inv[i]=−⌊pi⌋∗inv[p%i]%pinv[i]= -\lfloor\frac{p}{i}\rfloor*inv[p\%i]\%p

这个时候inv[i]inv[i]是为负数的,范围在−p+1-p+1到00

考虑到−⌊pi⌋∗inv[p%i]-\lfloor\frac{p}{i}\rfloor*inv[p\%i]不可能为00或pp,所以inv[i]inv[i]的范围在−p+1-p+1到−1-1

因此我们对inv[i]inv[i]加上pp就可以有inv[i]inv[i]的范围在11到p−1p-1

我们就可以得到公式inv[i]=p−⌊pi⌋∗inv[p%i] (mod  p)inv[i]= p-\lfloor\frac{p}{i}\rfloor \ast inv[p\% i]\ (\mod p)

这时候问题来了,对于同一道题目,两种写法在洛谷上都可以AC,但是在本校一模一样的题目上会有一个点会WA掉,

想问一下后面一种写法是否是正确的,如果错误,是否可以构造一组数据出来

2023/5/10 20:18
加载中...