適用:求某乙個數在模意義下的乘法逆元。 如果a
、p互質,那麼有ap
−a就是p的倍數,所以有ap
≡a(modp)
,ap−
1≡1(
modp
) 。所以只要打乙個快速冪就ok了。
code
#include
using namespace std;
int n,p;
int power(int
x,int k)
return ans%p;
}int main()
適用:某一區間的所有的數在模意義下的乘法逆元、求單個逆元(遞迴求解)。
簡單地說就是乙個遞推。
首先我們有:1−
1≡1(
modp)
然後,我們設p=
k×i+
r,r1<
i<
p 再將這個式子放到
modp
意義下一看:k×
i+r≡
0(modp)
再兩邊同時乘上i−
1,r−
1 可以得到: k×
r−1+
i−1≡
0(modp)
移項: i−
1=−k
×r−1
(modp)
所以: i−
1≡−[
pi]×
(pmodi)−
1 於是乎我們就可以遞推處當前的逆元了:
a[i]=-(p/i)*a[p%i]
然後其實吧,我們還可以通過遞迴求解,在o(
log2
p)的時間內求出單個逆元。怎麼證明時間複雜度呢:由於我們可以發現
pmod
i2 ,所以每次的子問題規模減半,最終遞迴次數也可見了。
code:
#include
#define maxn 3000005
using
namespace
std;
int n;
long
long p;
long
long ans[maxn];
int main()
模板 乘法逆元
這是一道模板題 給定n,p求1 n中所有整數在模p意義下的乘法逆元。輸入格式 一行n,p 輸出格式 n行,第i行表示i在模p意義下的逆元。輸入樣例 1 複製10 13 輸出樣例 1 複製179 108112 534 1 n 3 106,n1 n 3 106,n輸入保證 p p p 為質數。先扔個線性...
模板 乘法逆元
這是一道模板題 給定n,p求1 n中所有整數在模p意義下的乘法逆元。輸入格式 一行n,p 輸出格式 n行,第i行表示i在模p意義下的逆元。輸入樣例 1 複製 10 13 輸出樣例 1 複製 179 108112 534 1 n 3 106,n輸入保證 p 為質數。關於這道題,其實就是乙個求逆元的模板...
luogu P3811 模板 乘法逆元
這是一道模板題 給定n,p求1 n中所有整數在模p意義下的乘法逆元。一行n,p n行,第i行表示i在模p意義下的逆元。10 13179 108112 534說明 1 leq n leq 3 times 10 6,n p 20000528 1 n 3 10 6,n 輸入保證 p p 為質數。逆元可以線...