数论

一、原根

性质1

a,a2,...,aδm(a)m两两不同。

证明 反证,设存在0<i<jδm(a),且aiaj(modm)。两边同除得aji1(modm)0<ji<δm(a),则δm(a)不为最小阶,矛盾。

性质2

an1(modm),则δm(a)n

证明 反证,设n=δm(a)q+r0<r<δm(a)arar(aδm(a))qan1(modm)

0<r<δm(a),则δm(a)不为最小阶,矛盾。

另,若apaq(modm),则pq(modδm(a))

性质3

(a,m)=(b,m)=1,则

δm(ab)=δm(a)δm(b)(δm(a),δm(b))=1

证明

AB

aδm(a)1(modm)bδm(b)1(modm),得

(ab)[δm(a),δm(b)]1(modm)

由性质2,

δm(ab)[δm(a),δm(b)]

A

δm(a)δm(b)[δm(a),δm(b)]

B

BA

abδm(ab)1(modm),得

abδm(ab)δ(b)1aδm(a)δ(b)(modm)

δm(a)δm(ab)δm(b)。结合B

δm(a)δm(ab)

同理得

δm(b)δm(ab)

再结合B

δm(a)δm(b)δm(ab)

又有

(ab)δm(a)δm(b)(aδm(a))δm(b)(bδm(b))δm(a)1(modm)

δm(ab)δm(a)δm(b)

综上得A

性质4

kN,mN,aZ,(a,m)=1,则

δm(ak)=δm(a)(δm(a),k)

证明

akδm(ak)=(ak)δm(ak)1(modm)

δm(a)kδm(ak)

δm(a)(δm(a),k)δm(aK)

(ak)δm(a)(δm(a),k=(aδm(a))kδm(a),k1(modm)

δm(ak)δm(a)(δm(a),k)

综上得

δm(ak)=δm(a)(δm(a),k)

定义

mNgZ . 若 (g,m)=1 ,且 δm(g)=φ(m) ,则称 g 为模 m 的原根。

g 满足δm(g)=|Zm|=φ(m) . 当 m 是质数时,我们有 gimodm,0<i<m 的结果互不相同。

判定定理

m3,(g,m)=1 ,则 g 是模 m 的原根的充要条件是,对于 φ(m) 的每个素因数 p ,都有gφ(m)p1(modm)

证明

AB

反证,若有gφ(m)p1(modm)φ(m)p<φ(m)=δm(g),不满足阶的最小性,故原命题成立

BA

B成立时,设存在 g不是模 m 的原根。
则存在t<φ(m) 使得 gt1(modm) .

由 裴蜀定理(设 a,b 是不全为零的整数,存在整数 x,y , 使得 ax+by=gcd(a,b) ) 得,一定存在一组 x,y 满足 xt=yφ(m)+(t,φ(m)) .

又由 欧拉定理 得 gφ(m)1(modm) ,故有:

1gxtgyφ(m)+(t,φ(m))g(t,φ(m))(modm)

由于 (t,φ(m))φ(m)(t,φ(m))t<φ(m) .

故存在 φ(m) 的素因数 p 使得(t,φ(m))φ(m)p .

gφ(m)pg(t,φ(m))1(modm) ,与条件矛盾。

故假设不成立,原命题成立。

个数

若一个数 m 有原根,则它原根的个数为φ(φ(m))

证明

m 有原根 g ,则由阶的性质4得

δm(gk)=δm(g)(δm(g),k)=φ(m)(φ(m),k)

所以若 (k,φ(m))=1 ,则有: δm(gk)=φ(m) ,即 gk 也是模 m 的原根。

而满足 (φ(m),k)=11kφ(m)kφ(φ(m)) 个。所以原根就有 φ(φ(m))

存在定理

一个数 m 存在原根当且仅当 m=2,4,pα,2pα ,其中 p 为奇素数, αN

定理1

奇素数p有原根

证明 先证一个引理:

ab 是与 p 互素的两个整数,则存在 cZ 使得 δp(c)=[δp(a),δp(b)] .

证明 质因数分解 δm(a)=i=1kpiαi,δm(b)=i=1kpiβi

化成

δm(a)=XY,δm(b)=ZW

其中:

Y=i=1kpi[αi>βi]αi

X=δm(a)Y

W=i=1kpi[αiβi]βi

Z=δm(b)W

则由阶的 性质 4,可得:

δm(aX)=δm(a)(δm(a),X)=XYX=Y

同理:
δm(bZ)=W

又因为显然有 (Y,W)=1YW=[δp(a),δp(b)],则再由阶的 性质 1,可得:

δm(aXbZ)=δm(aX)δm(bZ)=YW=[δp(a),δp(b)]

于是令 c=aXbZ 引例得证。

回到原命题,对 1(p1) 依次两两使用引理,可知存在 gZ 使得
$ \delta_p(g)=\left\delta_p(1),\delta_p(2),\cdots,\delta_p(p-1)\right]

这表明 δp(j)δp(g)(j=1,2,,p1) ,所以 j=1,2,,p1 都是同余方程
xδp(g)1(modp)

的根。由拉格朗日定理,可知方程的次数 δp(g)p1 .

又由费马小定理,易知 δp(g)p1 ,故 δp(g)=p1=φ(p) .

综上可知 g 为模 p 的原根。

定理2

对于奇素数 pαNpα 有原根。

证明

一个基本的想法是将模 p 的原根平移。

先证明一个引理:

存在模 p 的原根 g ,使得 gp11(modp2) .

证明

事实上,任取模 p 的原根 g ,若 g 不满足条件,我们认定 g+p 满足条件。

易知 g+p 也是模 p 的原根。

我们有
$ \begin{aligned} (g+p)^{p-1}&\equiv \binom{p-1}{0}g{p-1}+\binom{p-1}{1}pg \pmod {p^2}\ &\equiv g{p-1}+p(p-1)g \pmod {p^2}\ &\equiv 1-pg^{p-2} \pmod {p^2}\ &\not\equiv 1 \pmod {p^2} \end{aligned} $

回到原题,我们证明若 g 是一个满足引理条件的原根,则对任意 αNg 是模 pα 的原根。

首先,证明下面的结论:对任意 βN ,都可设
$ g{\varphi(p\beta)}=1+p^{\beta} k_{\beta} $

这里 pkβ 。事实上, β=1 时,由 g 的选取可知结论成立。现设上式对 β 时成立,则
$ \begin{aligned} g{\varphi(p)}&=\left(g{\varphi\left(p\right)}\right)^p\ &=\left(1+p{\beta}k_{\beta}\right)p\ &\equiv 1+p^{\beta+1}k_{\beta} \pmod {p^{\beta+2}} \end{aligned} $

结合 pkβ 可知命题对 β+1 成立。

所以命题对任意 βN 都成立。

其次,记 δ=δpα(g) ,则由欧拉定理,可知 δpα1(p1) .

而由 g 为模 p 的原根,及 gδ1(modpα) .

所以可设 δ=pβ1(p1) ,这里 1βα .

现在利用之前的结论,可知:
$ g{\varphi(p)}\not\equiv 1\pmod {p^{\beta+1}}\implies g^{\delta}\not\equiv 1\pmod {p^{\beta+1}} $

结合 gδ1(modpα) 可知 βα .

综上可知, β=α ,即:
$ \delta_{p{\alpha}}(g)=p(p-1)=\varphi(p^\alpha) $

从而, g 是模 pα 的原根。

定理3

对于奇素数 pαN2pα 的原根存在。

证明

g 是模 pα 的原根,则 g+pα 也是模 pα 的原根。

gg+pα 中有一个是奇数,设这个奇数是 G ,则 (G,2pα)=1 .

由欧拉定理, δ2pα(G)φ(2pα) .

Gδ2pα(G)1(mod2pα) ,故:
$ G{\delta_{2p{\alpha}}(G)}\equiv 1 \pmod {p^{\alpha}} $

利用 G 为模 pα 的原根可知 φ(pα)δ2pα(G) .

结合 φ(pα)=φ(2pα) 可知 G 为模 2pα 的原根。

定理4

对于 m2,4 ,且不存在奇素数 pαN 使得 m=pα,2pα ,模 m 的原根不存在。

证明

对于 m=2ααN,α3 ,则对任意奇数 a=2k+1 均有:

a2α2=(2k+1)2α21+(2α21)(2k)+(2α22)(2k)2(mod2α)1+2α1k+2α1(2α21)k2(mod2α)1+2α1(k+(2α21)k2)(mod2α)1(mod2α)

其中最后一步用到 k(2α21)k2 同奇偶,故其和为偶数。

m 不是 2 的幂,且 m 为符合题目条件的数,则可设 m=rt ,这里 2<r<t(r,t)=1 .

此时,若 (a,m)=1 ,由欧拉定理可知:
aφ(r)1(modr);,aφ(t)1(modt)

注意到 n>2 时, φ(n) 为偶数,所以:
a12φ(r)φ(t)1(modrt)

进而:
δm(a)12φ(r)φ(t)=12φ(rt)=12φ(m)<φ(m)

由原根定义可得:模 m 的原根不存在。

求解

求质数x的原根,枚举2到x-1并检验。ax1p1,...,ax1pm是否存在一个数mod x为1。若存在,a不是x的原根;否则是。

代码
inline void fen(int x){
    cnt=0;
    for(int i=2;i*i<=x;++i)
        while(!(x%i)){
            p[++cnt]=i;
            while(!(x%i))  x/=i;
        }
    if(x^1)  p[++cnt]=x;
}inline int power(int a,int b){
    int res=1;
    while(b){
        if(b&1)  res=res*a%mod;
        a=a*a%mod;b>>=1;
    }return res;
}inline int gen(int x){
    fen(x-1);
    for(int i=2;i<x;++i){
        bool f=1;
        for(int j=1;j<=cnt;++j)
            if(power(i,(x-1)/p[j])==1){
                f=0;break;
            }
        if(f)  return i;
    }
}

posted @   yisiwunian  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示