一个数m如果有原根,则其原根个数为phi(phi(m))。特别地,对素数有phi§=p-1。
假设g是奇素数p的一个原根,则 g 1 , g 2 , . . . , g ( p − 1 ) g^1,g^2,...,g^{(p-1)} g1,g2,...,g(p−1)在模p意义下两两不同,且结果恰好为 1 p − 1 1~p-1 1 p−1,由此可以定义“离散对数”,与连续数学中的对数有异曲同工之妙。
离散对数又叫做“指标”,有指标法则: I ( a b ) ≡ I ( a ) + I ( b ) ( m o d p − 1 ) ; I ( a k ) ≡ k ∗ I ( a ) ( m o d p − 1 ) I(ab)≡I(a)+I(b) (mod p-1);I(a^k)≡k*I(a) (mod p-1) I(ab)≡I(a)+I(b)(modp−1);I(ak)≡k∗I(a)(modp−1),由此可以把乘法转化为加法。
又因为 g 1 , g 2 , . . . , g ( p − 1 ) g^1,g^2,...,g^{(p-1)} g1,g2,...,g(p−1)在模p意义下两两不同,于是判断方法:O(p)
inline bool pdg(int x,int p){
int t = 1;CLR(vis,0);
FOR(i,0,p-2){
if(vis[t]) return false;
vis[t] = true;
t = qmul(t,x,p);
}
return true;
}
int g;
inline int getg(int p){
FOR(i,2,p-1){
if(pdg(i,p)) return i;
}
}
对于指数方程: a x ≡ b ( m o d p e ) a^x \equiv b \pmod {p^e} ax≡b(modpe)
令g为p^e原根,也就是p的原根
有 l o g g a ∗ x ≡ l o g g b ( m o d ϕ ( p e ) ) log_ga*x \equiv log_gb \pmod{\phi(p^e)} logga∗x≡loggb(modϕ(pe))
留坑待填。。。