数论

最大公因数

  • 直接使用__gcd(x,y)

  • 手写 \(\gcd\)

    inline int gcd(int a,int b)
    {
        if(b==0)return a;
        return gcd(b,a%b);
    }
    

数论分块

一般是求

\[\sum_{i=1}^{i\le n}\left\lfloor\dfrac{n}{i}\right\rfloor \]

考虑 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 的值可能会重复,所以可以算出 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 每一段相同的值以及其区间。

接下来考虑如何求出 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 每一段相同的值以及其区间。

方法就是用

while (l <= n) {
    r = n / (n / l);  // 计算当前块的右端点

    l = r + 1;  // 左端点移到下一段
}

r=l+1很好理解,主要是看r=n/(n/l)

在括号里的n/l其实是指当前这一段 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 的值。

n/l在套一个n/是指 \(\left\lfloor\dfrac{n}{i}\right\rfloor=n/l\) 中最大的 \(i\)

费马小定理

\(p\) 为素数,\(\gcd(a,p)=1\),则 \(a^{p-1}\equiv1\) \((mod\) \(p)\).

引理

  • 引理1:若 \(a,b,c\) 为任意 \(3\) 个整数,\(m\) 为正整数,且 \(\gcd(m,c)=1\)

    则当 \(a*c\equiv b*c\) \((mop\) \(m)\) 时,有 \(a\equiv b\) \((mod\) \(m)\).

    证明:

    \(a*c\equiv b*c\) \((mod\) \(m)\) 可得 \(ac-bc\equiv 0\) $(mod $ \(m)\) ,即 \((a-b)c\equiv 0\) $(mod $ \(m)\).

    因为 \(\gcd(m,c)=1\)\(m,c\) 互质,\(c\) 可以约去,\(a-b\equiv 0\) $(mod $ \(m)\)\(a\equiv b\) $(mod $ \(m)\).

  • 引理2:设 \(m\) 是一个整数且 \(m>1\)\(b\) 是一个整数且 \(\gcd(m,b)=1\)。如果 \(a[1],a[2],a[3],a[4],…a[m]\) 是模 \(m\) 的一个完全剩余系,则 \(b·a[1],b·a[2],b·a[3],b·a[4],…b·a[m]\) 也构成模 \(m\) 的一个完全剩余系

    证明:若存在2个整数 \(b·a[i]\)\(b·a[j]\) 同余即 \(b·a[i]\equiv b·a[j](mod\) \(m)(i>=1,j>=1)\),根据引理1则有 \(a[i]≡a[j](mod\) \(m)\)。根据完全剩余系的定义可知这是不可能的,因此不存在 \(2\) 个整数 \(b·a[i]\)\(b·a[j]\) 同余。

    所以 \(b·a[1],b·a[2],b·a[3],b·a[4],…b·a[m]\) 也构成模 \(m\) 的一个完全剩余系

证明:

设一个质数为 \(p\),我们取一个不为 \(p\) 倍数的数 \(a\).

构造素数 \(p\) 的完全剩余系:\(P={1,2,3,\dots,p-1}\)

因为 \(\gcd(a,p)=1\),有引理2得:\(A={a,2a,3a,4a,\dots,(p-1)a}\) 也是一个完全剩余系,由完全剩余系的性质,

\(1\times2\times3\times\dots\times(p-1)\equiv a\cdot 2a\cdot \dots\cdot (p-1)a\) \((mod\) \(p)\).

\((p-1)!\equiv (p-1)!\cdot a^{p-1}\) $(mod $ \(p)\).

易证:\(\gcd((p-1)!,p)=1\) ,根据引理1,约去 \((p-1)!\) ,得到

\[a^{p-1}\equiv 1 (\bmod p) \]

由此费马小定理得证.

posted @ 2024-08-23 17:03  tyccyt  阅读(3)  评论(0编辑  收藏  举报