1 快速幂求逆元 p为质数
2 扩展欧几里得算法(欧几里得算法)
3 阶乘求逆元
4 求1~n的逆元:即:线性法求逆元
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=3e6+10;
int n,p;
ll str[N];
int main()
{
scanf("%d%d",&n,&p);
str[0]=str[1]=1;
//0的阶乘和逆元都是属于1
cout<<1<<endl;
for(int i=2;i<=n;i++)
{
str[i]=((p-p/i)*str[p%i])%p;//因为逆元不可以是负数,所以(-p/i)%p===(p-p/i)%p
//因为这道题p%i最终的结果不会超过i,但是有前提的,因为p%1==0或者1,所以单独进行初始化
printf("%lld\n",str[i]);
}
return 0;
}
浙公网安备 33010602011771号