Loj-110乘法逆元(线性模板题)

来源:互联网 发布:mac页面比例缩小快捷键 编辑:程序博客网 时间:2024/05/17 14:18

题目描述

给定正整数 n n n 与 p p p,求 1∼n 1 \sim n 1∼n 中的所有数在模 p p p 意义下的乘法逆元。

输入格式

一行两个正整数 n n n 与 p p p

输出格式

n n n 行,第 i i i 行一个正整数,表示 i i i 在模 p p p 意义下的乘法逆元。

样例

样例输入10 13

样例输出

179108112534

数据范围与提示

1≤n≤3×1e6,n<p<20000528 p为质数。
/*    线性求解 1- n 的乘法逆元。 (1~n) ==1 % p; 的乘法逆元。        inv[1]=1;        inv[i] = (p - p / i) * inv[p % i] % p;    今日又明白一点:        cout的用时也大大超过printf。*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 3*1e6+10;long long inv[maxn];int main(){    int n,p;    while(~scanf("%d%d",&n,&p))    {        memset(inv,0,sizeof(inv));        inv[0]=inv[1]=1;        for(int i=2;i<=n;i++)            inv[i] = (long long)(p-p/i)*inv[p%i]%p;        for(int i=1;i<=n;i++)            printf("%lld\n",inv[i]);        //cout超时。    }    return 0;}