原根

若是m > 1, 而且 n 和 m 互質ui

  則 $n^t\equiv 1(mod m)$spa

的最小的t,稱爲n模m的階(或週期).net

則對於任意的$n^x\equiv 1(mod m)$code

t|xblog

咱們已知$n^{\phi (m)}\equiv 1(mod m)$get

因此io

t|$\phi(m)$class

 

特殊狀況時t == $\phi(m)$方法

此時n稱爲m的原根di

 

求t的方法 先求出$\phi(m)$

而後質因子分解  (不能用質因子分解 是全部的因子)

這樣:

 

int res = phi[n]; for(int i = 2; i <= sqrt(phi[n] + 0.5); i++) { if(res % i == 0) { if(i * i == res) v.push_back(i); else v.push_back(i), v.push_back(res / i); } }

 

 

 

 最小的p使得$n^{p}\equiv 1(mod m)$ 的即爲t

題目:HDU - 1395

 

求原根的方法

先把$\phi(m)$分解質因子

$\phi(m) = p_{1}^{a1}*p_{2}^{a2}*\cdots *p_{k}^{ak} $

而後枚舉g

若是 對任意的$i\in [1, k]$

$g^\frac{\phi (m)}{p_{i}}\neq 1(mod  m)$

則g爲m的一個原根

相關文章
相關標籤/搜索