Loj-110乘法逆元(线性模板题)
2017-06-22 21:24
513 查看
题目描述
输入格式
输出格式
样例
样例输出
数据范围与提示
给定正整数 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
样例输出
1 7 9 10 8 11 2 5 3 4
数据范围与提示
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; }