原题地址
一道简单的模板题,注意控制算法复杂度
在解决这题之前,我们需要了解一个重要的公式
inv[i]=(c-c/i)*inv[c%i]%c;
此公式即为乘法逆元的递推公式
代码很简单
//拓展欧几里得 快速幂+费马小定理会复杂度为O(nlogn),会被卡
//因此选用复杂度为O n 的线性递推法
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int inv[3000030];//存储乘法逆元
int main(){
ll a,c;
scanf("%lld %lld",&a,&c);//a相当与题目中的n,c为mod
puts("1");
inv[1]=1;
for(int i=2;i<=a;i++)
{
inv[i]=(c-c/i)*inv[c%i]%c;//递推公式
printf("%d\n",inv[i]);//printf函数速度快,用cout可能会被卡
}
}