题意:
这是一道模板题。
给定正整数 n 与 p,求1到n中的所有数在模 pp意义下的乘法逆元。
输入格式
一行两个正整数 n与 p
输出格式
n 行,第 i 行一个正整数,表示 i 在模 p意义下的乘法逆元。
样例
Inputcopy | Outputcopy |
---|---|
10 13 | 1 7 9 10 8 11 2 5 3 4 |
数据范围与提示
1<=n<=3*1e6; p<=1e9
p 为质数。
关键:
inv[i]=(long long)(p-p/i)*inv[p%i]%p;
开long long
AC:
#include<bits/stdc++.h>
using namespace std;
long long n,p;
vector<long long> inv;
int main()
{
scanf("%d%d",&n,&p);
inv.resize(n+5,1);
inv[1]=1;
printf("1\n");
for(int i=2;i<=n;i++)
{
inv[i]=(long long)(p-p/i)*inv[p%i]%p;
printf("%lld\n",inv[i]);
}
}