luogu3811 乘法逆元

来源:互联网 发布:万德数据库使用方法 编辑:程序博客网 时间:2024/05/22 04:59

线性推逆元。
p是质数。首先显然有1×111(mod p)
然后强行p=ki+r,其中i是我们想求的逆元。
ki+r0(mod p),同乘i1r1,得
kr1+i10(mod p)i1kr1(mod p)根据带余除法有i1pi×(p mod i)1
实际操作中为了防止负数出现还要稍微处理处理

#include <iostream>#include <cstdio>using namespace std;int inv[3000006], n, p;int main(){    cin>>n>>p;    inv[1] = 1;    cout<<"1\n";    for(int i=2; i<=n; i++){        inv[i] = (long long)(p-p/i)*inv[p%i]%p;        printf("%d\n", inv[i]);    }    return 0;}