[模板]乘法逆元
题目大意:求1-n中每个数的逆元
逆元定义:
若(ax=1(mod~b)),且(a,b)互质,那么把(x)称为(a)在(mod~b)意义下的逆元
做法:
1:做法很多,这里只说明一个最快的线性算法
2:设(p=k×i+r,(1<r<i<p))也就是(k)是(p÷i)的商,(r)是余数 。
3:考虑(k×i+r=0(mod~p))两边同时除以(i×r)然后可以得到(k×r^{-1}+i^{-1}=0(mod~p)) (i^{-1}=-k×r^{-1}(mod~p)) (i^{-1}=-lfloorfrac{p}{i}
floor×(p~mod~i)^{-1}(mod~p))
#include <cstdio>
#include <iostream>
#include <algorithm>
typedef long long LL;
using namespace std;
const int maxn = 3e6+7;
int n,p;
LL inv[maxn];
int main()
{
inv[1] = 1;
scanf("%d%d",&n,&p);
for(int i=2;i<=n;i++)
inv[i] = (p - p/i) * inv[p%i] % p;
for(int i=1;i<=n;i++)
printf("%lld
",inv[i]);
return 0;
}