线性递推求逆元模板+简易推论

	inv[1] = 1;
	printf("%lld\n",inv[1]);
	for(int i = 2; i <= n; i++)
		inv[i]=((p - p / i) * (inv[p % i])%p)%p;

已知 1 / i ≡ i p − 2 ( m o d p ) 1 / i ≡ i ^ {p-2} (mod p) 1/iip2(modp)
所以可以使用快速幂来进行求解,但时间复杂度为O(n × \times ×logn) n大的时候常数太大
所以要学会线性递推求逆元

设 t = p / i ,k = p % i;
p = i × \times × t + k ;
0 Ξ i × \times × t + k (mod p)
移项

  • i × \times × t Ξ -k ( mod p)
    同除 ( i × \times × k )
    -( t / k ) Ξ 1 / i (mod p)
    带入
    1 / i Ξ - (p / i / ( p % i ) ) (mod p)
    1 / i Ξ (- p / i × \times × (1 / (p%i) ) ) (mod p)
    设 inv [ x ] 为x的逆元

得 inv[i] = (p - p / i) × \times ×(inv[p % i] % p) % p;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值