zoukankan      html  css  js  c++  java
  • 莫反,欧拉,扩展欧拉

    对欧拉定理 , 莫比乌斯等过敏者请慎重食用

    • 简单涉猎一下数论,讲的顺序很迷,,,一些东西了解个大概就好,莫要深究哈
    • 数论这个东西, 尤其像莫比乌斯和欧拉这种, 基本上就是靠临场推式子, 会证明只是个心理基础(当然你也可以直接用,但明白了为什么,用起来会更得心应手)
    • 若无特殊说明,则突然出现的某个函数默认为积性函数
    • 应该用不了(60min)(希望)
    • 这堂课应该没题(大概)
    • 有什么不懂的, 这课件上面又没说(或只打了个“显然”什么的),直接问我, 我能口胡就口胡,口胡不了就让(YLCH)上((q(>-<)p

    前(che)摇(dan)

    积性函数:

    对于任意互质的整数a和b有性质(large f(a*b)=f(a)*f(b))的数论函数。

    完全积性函数:

    对于任意整数a和b有性质(large f(a*b)=f(a)*f(b))的数论函数。

    0/0 引入几个函(fei)数(hua)

    1.恒等函数_不管参数是什么,函数值恒为1

    (I(n) = 1)(id_0 (n) = 1)

    2.元函数_只在参数为1时函数值为1,其余情况皆是0

    (e(n) = [n = 1])

    e 实际上是 (largeepsilon),但是太难打了......

    3.单位函数_函数值就是参数值

    $ id_1 (n) = n $

    这三个函数都是完全积性函数

    。。。有点觉得这三个函数没啥用(就跟废话一样)

    不!它们有大用!(其实的确挺废物的)

    下面是一些稍作了解的函数全是废话

    积性函数
    φ(n) -欧拉函数,计算与n互质的正整数之数目
    
    μ(n) -莫比乌斯函数,关于非平方数的质因子数目
    
    d(n) -n的正因子数目
    
    σ(n) -n的所有正因子之和
    
    σk(n)-因子函数,n的所有正因子的k次幂之和,当中k可为任何复数。
    
    I(n) -不变的函数,定义为 1(n) = 1 (完全积性)
    
    Id_k(n)-单位函数,定义为 Idk(n) = nk(完全积性)id_0(n) = I(n) = 1
    
    ε(n) -定义为:若n = 1,ε(n)=1;若 n > 1,ε(n)=0。别称为“对于狄利克雷卷积的乘法单位”(完全积性)
    
    λ(n) -刘维尔函数,关于能整除n的质因子的数目
    
    γ(n),定义为γ(n)=(-1)^ω(n),在此加性函数ω(n)是不同能整除n的质数的数目
    
    另外,所有狄利克雷特征均是完全积性的[1]
    

    1/0 狄利克雷卷积

    我们用符号 * 表示两个函数卷积

    形如

    [large (f * g) (n) = sum_{d|m} f(d) g(frac{n}{d}) ]

    “(n)”在平常可以省略, n 指参数大小

    (好了接下来我就把它省略了,因为 * 这玩意容易和乘积弄混,所以下面仔细听我说)

    他满足

    交换律 $ large f * g = g * f$

    结合律 $large (f * g) * h = f * (g * h) $

    分配律 $large (f + g) * h = f * h + g * h $

    证明口胡就行

    好了, 接下来开始跟我一起进行无厘头的推导)))

    试想, 有一个积性函数 (f) , 卷上元函数((e(n) = [n = 1])),会发生什么?

    [large f * e = sum_{d | n} f(d)e(frac{n}{d}) ]

    然后显然这个式子只在 (d=n) 时有值

    所以上式等价于

    [large f * e = sum_{d|n}f(d)[d = n] = f ]

    写简洁点 (large f*e = f)

    这个很重要

    2/0莫比乌斯

    莫比乌斯函数,符号为 (mu)

    它表示的值咋算呢,(Ame) 大佬给了一个神奇的定义式, 还有一个计算公式

    定义式:

    [large mu(m) = egin{cases} (-1)^r & ext{$m = p_1p_2...p_r$}\ 0 & ext{$m$能被某个$p^2$整除} end{cases} ]

    计算式

    [large sum_{d|n}mu(d) = [n=1] ]

    细想,上面的式子可不可以用狄利克雷卷积表示呢?

    左式多乘以一个恒等函数应该没关系吧

    右式貌似也可以用元函数换掉,emm....有了!

    [largesum_{d|n}mu(d)id_0(frac{n}{d}) = e(n) ]

    (mu * id_0 = e)

    这个很重要


    回想上面已经证明得到的两个卷积式

    (large f *e = f)

    (large mu * id_0 = e)

    有了这个,接下来就说说莫比乌斯反演

    先上公式

    [large g(m) = sum_{d|m}f(d) ]

    卷积表示为 (g = f * id_0) (1)

    [large f(m) = sum_{d|m}mu(d)g(frac{m}{d}) ]

    卷积表示 (large f = g * mu) (2)

    我们现在的任务就是由(1)推出(2)或从(2)推出(1),只要证明这两个式子中某个式子使用另一个式子可以成立就行,注意我不是证它俩等价!!!

    推吧(下面的证明即是把(1)当做结论, (2)为衍生式来推导)

    [large{ g * mu \ = f*id_0*mu\ =f*(id_0*mu)\ =f*e\ =f } ]

    QED! QVQ

    3 / 0 欧拉函数与定理、费马小定理证明

    3 / 1 函数定义

    ​ 在数论中,对于正整数N,少于或等于N ([1, N]),且与N互质的正整数(包括1)的个数,记作 φ(n)。

    3 / 2 函数性质

    ​ (1)对于一个质数 p,和一个正整数 k。

    [large varphi(p ^ k) = p ^ k - p ^ {k - 1} = (p - 1) * p ^ {k - 1} ]

    ​ (2)m,n互质

    [large varphi(m*n) = varphi(m) * varphi(n) ]

    欧拉函数是积性函数。

        (3)对于任意整数 x,都有

         (largevarphi(x)=xprod^n_{i=1}(1-frac{1}{p_i})))

    ​ (4)对于某一奇数 n,φ(2*n) = φ(n)。

        (5)对于任意两个互质的数 a,n(n>2),都有

    [large a^{varphi(n)} ≡ 1 (mod n) ]

    ​ 此为 欧拉定理

        (6)当n=p 且 a与素数p互质(即:gcd(a,p)=1)则上式有:

    [large a^{p-1} ≡ 1 (mod n) ]

    ​ 为 费马小定理

        (7)

    [large varphi(m) = sum_{d|m}mu(d)frac{m}{d} ]

    3 / 3 函数性质证明

    实在不想打latex

    ​ (1)在性质(1)中,很明显,k = 1时,φ(pk) = φ(p) = p-1。

        已知小于 (p^k) 的正整数的个数为 (p^k-1)

        其中和 pk 不互质的正整数有 { p×1,p×2,...,p×(p(k-1)-1)},共计p(k-1)-1个,

        所以 φ(pk) = pk - p(k-1) = (p-1)*p(k-1)

        (2)关于性质(2)性质

        对于 m*n,它是 m 和 n 的最小公倍数

        与它不互质的数有

        (1*n , 2*n,3*n.......m*n)

        和

        (1*m,2*m,3*m.....n*m) 共 m+n-1 个,

        所以(φ(m*n) = m*n-(m+n-1) = (m-1)*(n-1) = φ(m)*φ(n))

        (3)对于性质(3)(先说好这东西咋证明我也没有什么好办法

        众所周知,任意一个整数n都可以表示为其质因子的乘积:

        那我们就假设 n = (a[1] ^ k[1]) * (a[2] ^ k[2]) * ......* (a[e] ^ k[e])。

        a[] 为 n 的某一质因数,e 为不同的质因数个数,k[i] 为相应的质因数 a[i] 的对应个数。

        n*(1-1/a[i])是不是就表示 n 中除去公因数为 a[i] 的数的个数?

        那么 n * (1-1/a[1]) * (1-1/a[2]) * (1-1/a[3]) * ... * (1-1/a[e]) 就是 φ(n)呗。

    ​ 没错,这是口糊感性证明。。。。。

        (4)不用说吧。。。就是 (2)

        (5)(6)见下欧拉定理证明

        

        (7)这是个好东西呢

        前面的莫比乌斯反演公式还记得不?

        若

    [large g(m) = sum_{d|m}f(d) ]

        则

    [large f(m) = sum_{d|m}mu(d)g(frac{m}{d}) ]

        我现在先给你这么一个式子, 这个式子为啥成立的证明听我口胡

    [large (varphi * id_0) ≡ id_1 ]

    ​ 然后用基本的莫比乌斯反演式, 就可以求出(7)    

    ​ 于是我们可以用这个式子去求解欧拉函数

    [large varphi(m) = sum_{d|m}mu(d)frac{m}{d} ]

       

    3 / 4 欧拉定理证明

        (缓一缓。。。。。(¯﹃¯)咱们继续)

    [large a^{varphi(n)} = 1 (mod n) ]

        设

    [large x_1 , x_2 , x_3 ...... x_{varphi(n)} ]

    ​ 是 1~n 中与 n 互质的数。1<=i<=φ(n)

    [large m_1=a*x_1,m_2=a*x_2 ...... m_{varphi(n)}=a*x_{varphi(n)} ]

    • 对于这其中任意两个不相同的数 (m_s)(m_r) 都不模 n 同余

    ​ 这里用反证法证明:// s 和 r 都是下标

        若 (m_s ≡ m_r (mod n)),咱们假设(m_s)更大。那么(m_s - m_r = a*(x_s-x_r))

        a与n互质,(x_s-x_r<n),因此 (a*(x_s-x_r)) 一定无法被 n 整除。

    ​ 即便 (x_s-x_r) 可能不与 n 互质

        也就是说这 φ(n) 个数 %n 都不同余。

        φ(n)个数有φ(n)种余数。(a*x_i) 和 n 互质!

        2)那么这些数的余数和 n 的关系又是什么?

    • 这些数除n的余数都与n互质

        假设其余数和 n 有公因数 r。

        那么 $large a * x_i=p * n + q * r,n = k * r $---> (a * x_i = (p * k + q) * r).

        (a*x_i) 和 n 不互质了!

        那么这(指 m 序列)些数%n,都在(x_1,x_2,x_3……x_{φ(n)})中,因为这(指 x 序列)是1~n中与n互质的所有数,而m余数又小于且互质于n。

        由上得出:

        (large m_1 * m_2 * m_3 … … m_{φ(n)} ≡ x_1 * x_2 * x_3 … … x_{φ(n)} (mod n))

        (large a ^ {φ(n)} * (x_1 * x_2 * x_3 … … x_{φ(n)}) ≡ x_1 * x_2 * x_3 … … x{φ(n)} (mod n))

    ​ 化简

    (large a ^ {φ(n)} ≡ 1 (mod n))

        (QED!)

    3 / 5 费马小定理证明

        (large a ^ {p - 1} ≡ 1 (mod n))

        (large a ^ {φ(p)} ≡ 1 (mod n))

        得证。┐(´∇`)┌

    4 / 0 欧拉降幂证明

       让你求这么一个式子

       $a^b mod p $ (不要求a, c 互质)

       当然没那么简单,

       a = 56895, b = 10000000052

       求吧(带着和善的笑容)

       很明显, 问题不在 a 而在 b

       数太大了,我们需要想办法让 b 变得短小(精悍)

       这时候我们要用一个叫做 欧拉降幂 的东东

       欧拉降幂是个啥?

       直接上式子

    [large a^b = egin{cases} a^{b mod varphi(p)} & ext{gcd(a,p) = 1}\ a^b & ext{gcd(a,p) != 1, b < $varphi(p)$}\ a^{b mod varphi(p) + varphi(p)} & ext{gcd(a,p) != 1, b >= $varphi(p)$} end{cases} ]

       证明

    4 / 1(a^b = a^{b mod varphi(p)} (mod p)),(gcd(a,p) = 1)

    [large { egin{aligned} &a^{b - b mod φ(p)} * a^{b mod φ(p)} = a^{b mod φ(p)} (mod p)\ \ &b - b mod φ(p) = k * φ(p)\ \ &a^{b - b mod φ(p)} = a^{k * φ(p)} = (a^{φ(p)})^k = 1 (mod p)\ \ &so:\ \ &a^b = a^{b - b mod φ(p)} * a^{b mod φ(p)} = a^{b mod φ(p)} (mod p) end{aligned} } ]

    4 / 2...... Need I zheng it? ARE YOU SURE ?

    4 / 3 (a^b = a^{b mod varphi(p) + varphi(p)} (mod p) gcd(a,p) != 1,b >= varphi(p))

    ​ 上述即是普遍情况,a,p 不互质

    ​ 从特殊情况(gcd(a,p) = a)对其进行上述式证明

    ​ 令 (p = s * x^r,gcd(s,x) = 1)

    ​ 因而

    [large{ egin{aligned} &x^{varphi(s)} = 1 (mod s)\ \ &x^{varphi(s) * varphi(x^r)} = 1 (mod s)\ \ &x^{varphi(p)} = 1 (mod s)\ \ &x^{varphi(p)} = k*s+1\ \ &同乘x^r\ \ &x^{varphi(p)+r} = k*s*x^r+x^r\ \ &x^{r + varphi(p)} = x^r (mod p)\ \ &又有x^{varphi(p)} = 1 (mod p)\ \ &故x^{varphi(p) * k} = 1 (mod p),k >= 0\ \ &x^{r + varphi(p)*k} = x^r (mod p)\ \ &(一长溜式子过于恶心,这里和谐一下)\ \ &x^b ≡ x^{b-r+r} = x^{b-r+varphi(p)+r} = x^{b+varphi(p)} (mod p) b≥r,b-r≥0\ \ &故\ \ &x^b = x^{b + varphi(p)} (mod p)\ \ &x^b = x^{b mod varphi(p) + varphi(p)} (mod p)\ \ &(x^{b mod varphi(p) + varphi(p)} = x^{b mod varphi(p) + k*varphi(p)} = x^b (mod p)) end{aligned} } ]

    ​ 得出(large x^b = x^{x mod varphi(p) + varphi(p)} (mod p))

    ​ 对质数的幂同样适用

    [large{ egin{aligned} &(x^k)^b = x^{k*b} \ \ &= x^{varphi(p) + k*b} \ \ &= x^{k*varphi(p) + k*b} \ \ &= (x^k)^{varphi(p)+b} \ \ &= (x^k)^{b mod varphi(p)+varphi(p)} (mod p)\ \ &b >=varphi(p),k>0 end{aligned} } ]

    ​ 将 a 分解

    [large a = prod_{i}^nx_i^{k_i} ]

    ​ 每个 x 都可满足上面的公式, 乘起来就是

    [large a^b = a^{b mod varphi(p) +varphi(p)} (mod p) ]

    QED

    5 / 0 结语(甩个水题)

    (luogu P5091)

    题目背景

    ​ 出题人也想写有趣的题面,可惜并没有能力。

    题目描述

    ​ 给你三个正整数,a,m,b你需要求:(a^b mod m)

    输入格式

    ​ 一行三个整数,a,m,b

    输出格式

    ​ 一个整数表示答案

    数据范围

    (1≤a≤10^9)(1≤b≤10^{20000000})(1≤m≤10^8)

    #include <bits/stdc++.h>
    
    #define ll long long 
    #define _ 0
    
    using namespace std;
    
    ll a, m, b;
    bool flg;
    
    inline ll read (int p) {
    	ll x = 0;
    	char ch = getchar();
    	while (! isdigit (ch)) ch = getchar ();
    	while (isdigit (ch)) {
    		x = (x << 1) + (x << 3) + (ch ^ '0');
    		if (x >= p) flg = 1; // 记录是否为第三种情况
    		x %= p;
    		ch = getchar ();
    	}
    	return x + (flg ? p : 0);
    } // 这里的快读虽然并不能提速,但可以实现 b 的 mod
    
    inline ll fast_pow (ll a, ll b, ll p) { // 快速幂(当然不用也行, 就是慢一点)5.12s
    	ll base = a, ans = 1;
    	while (b) {
    		if (b & 1) ans = ans * base % p;
    		b >>= 1;
    		base = base * base % p;
    	}
    	return ans % p;
    }
    
    inline ll phi (int p) {
    	int a, b;
    	a = b = p;
    	for (int i = 2; i * i <= a; ++i) { // 根号就够了 需要口胡吗
    		if (a % i == 0) {
    			b -= b / i; // 等价于 b = b * (1 - 1 / i), 精度问题 
    			while (a % i == 0) {
    				a /= i; // 把这几个质因子全去掉。。。 
    			}
    		}
    	}
    	if (a > 1) { // 应对素数情况 , 同时将最后一个没有因数用掉 
    		b = b - b / a;
    	}
    	return b;
    } // 不行你就死记硬背,反正也不长(((
    
    signed main () {
    	scanf ("%lld%lld", &a, &m);
    	b = read (phi (m));
    /*
        int k = a;
    	for (int i = 2; i <= b; i++) {
    		a *= k;
    		a %= m;
    	}
    	printf ("%lld", a); // 这么打也能过,就是慢一点,5.12s
    */
    	printf ("%lld", fast_pow (a, b, m)); // 1.01s
        return ~~(0^_^0);
    }
    
  • 相关阅读:
    图像的加载与保存
    numpy初学
    深入精通JavaScript插件
    Python图像处理库:Pillow 初级教程
    PIL包的应用
    UIWebView的离线缓存
    UITableView优化技巧
    UIKit Dynamics入门
    CALayer 一些重要属性
    一个Demo展示Storyboard的强大
  • 原文地址:https://www.cnblogs.com/codingxu/p/15002680.html
Copyright © 2011-2022 走看看