在某些組合數的計數問題中,經常會用到逆元,這裡我們講一下如何線性求出1到n在模p意義下的逆元,注意p為質數。
假設我們當前要求a在模p意義下的逆元。 令p
=ak+
r,(0
≤rp =a
k+r,
(0≤r
inv:array[0..1000] of longint;
i,n,p:longint;
begin
readln(n,p);
inv[1]:=1;
for i:=2
to n do
begin
inv[i]:=inv[p mod i]*(p-p div i) mod p;
end;
for i:=1
to n do
write(inv[i],' ');
end.
var
inv:array[0..1000] of longint;
i,n,p:longint;
begin
readln(n,p);
inv[1]:=1;
for i:=2
to n do
begin
inv[i]:=(-inv[p mod i]*(p div i) mod p+p) mod p;
end;
for i:=1
to n do
write(inv[i],' ');
end.
接下來求(1-n)!逆元,由於過於簡單,直接上**
#include
#include
typedef long long ll;
const ll mo=1e+9+7;
const int n=2000000;
using namespace std;
ll fac[n+55],inv[n+56];
ll power(ll a,int b)
return t%mo;
}int main()
由於我的水平有限,難免會有些寫錯的地方,希望大家批評指正,多多包容,thank you for your patience. 線性求逆元
求逆元可以用費馬小定理或者擴充套件歐幾里得,也可以用如下的o n 演算法 背下來 這個對p是有要求的,p 也就是模數 必須是質數 p不是質數的話,就用擴充套件歐幾里得比較方便了 兩個數有逆元當且僅當互質!inv 1 1 for i 2 i p i inv i p p i inv p i p也可以用另...
線性求逆元及其過程
連續兩天考了求逆元。所以想著寫一篇關於線性求逆元的部落格。inv 1 1 for int i 2 i n i inv i mod long long mod i inv mod i mod 我們要求i在模p意義下的逆元inv i 那麼我們就設ki r p,所以ki r移項可以得到 r 兩邊同時除以i...
線性求逆元及其過程
連續兩天考了求逆元。所以想著寫一篇關於線性求逆元的部落格。inv 1 1 for int i 2 i n i inv i mod long long mod i inv mod i mod 我們要求i在模p意義下的逆元inv i 那麼我們就設ki r p,所以ki r0 mod p 移項可以得到 r...