洛谷P3811題解
阿新 • • 發佈:2020-10-25
原題:
思路:
沒啥思路
已經把思路貼我臉上了
求逆元
這玩意是很重要的東西,一旦涉及到除法取模,就要用逆元轉化成乘法來取模
原因是:
(a+b) mod c=((a mod c)+(b mod c))mod c
(a-b) mod c=((a mod c)-(b mod c))mod c
(a*b) mod c=((a mod c)*(b mod c))mod c
(ab) mod c=((a mod c)b)mod c
但就是沒有(a/b) mod c=((a mod c)/(b mod c))mod c
所以除法真是個噁心人的東西
為了解決除法取模,我們當然可以把a/b計算出來
但是誤差太大了
於是乘法逆元應運而生,這玩意能把除法換成乘法,然後取模
具體就是
把(a/b) mod c變成(a*(b的逆元)) mod c
這道題是要求我們用線性時間求出一堆數的逆元
下附程式碼
程式碼:
#include <bits/stdc++.h> using namespace std; long long n,p; long long inv[3000050]; int main() { scanf("%lld%lld",&n,&p); inv[1]=1; cout << 1 << endl; for(int i=2;i<=n;i++) { inv[i]=(long long)(p-p/i)*inv[p%i]%p; printf("%lld\n",inv[i]); } return 0; }