zoukankan      html  css  js  c++  java
  • 【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】

    本文转载自:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9
    曾经看过如下一个公式:

    以上的公式如果第一次见到,难免有不少疑惑:
    为什么可以这么写?限制条件为什么是x >= Phi(C),这个公式为什么正确?

    今天突发奇想,在纸上YY以后得到了以下证明(个人证明,如果有问题欢迎提出)

    定理 1:
    对于一个数对(A,C) 必然存在一个最小的正整数 L,满足


    其中SPOS 是一个大于等于0的整数(下面具体介绍)
    我们称L 为(A,C) 的最小循环节长度

    证明:
    根据鸽巢原理,得到在x >= C 后必然出现循环,从而定理得证.

    定理 2:
    对于数对 (A,C) 下面的公式必然成立


    其中 k >= 0
    既L 的任意倍数均为一个新的循环节长度.
    证明:
    根据定理1,不难得证.

    定理 3:
    对于数对 (A,C) 必然存在 一个最大的SPOS >=0 ,满足
    (1) 若x属于区间 [0,SPOS -1] 内,得到的一个剩余系的长度为SPOS;
    (2) 该剩余系和x属于[SPOS,+oo]的剩余系的交集为空!

    证明:
    对于一个SPOS,由于[0,SPOS-1]内不存在循环,所以x属于[0,SPOS-1]内得到的值是唯一的.
    而第二点的证明也不难,因为如果不为空,那么必然可以缩小SPOS的值.

    定理 4:
    对于数对 (A,C) 若 (A,C) == 1,那么 L | Phi(C)

    证明:
    显然可以由欧拉公式,得到
    A^Phi(C) = 1 (mod C)
    而A^0 = 1 (mod C),于是出现了循环
    由定理2,该定理得证.

    定理5:
    对于数对 (A,C) 若 A|C
    那么有
    SPOS >= CNT
    其中CNT为满足 A^CNT | C的最大的正整数

    下面分2个情况
    (1) A^CNT == C
    果断显然成立
    (2) A^CNT * B = C
    于是我们假设对于[0,CNT] 内存在某个数i,有
    A^i = A^x (mod C)
    而由于x > CNT (因为[0,CNT]内不存在循环)
    所以
    A^CNT * A^(x - CNT) = A^i (mod A^CNT * B)
    显然如果 i < CNT
    那么是不可能有解的
    因为(A^CNT, A^CNT * B) | A^i 显然不成立

    于是Spos >= CNT 得证

    定理 6:
    对于一个数对 (A,C) 若存在

    那么有 L | M

    根据定理1,2 不难得到.

    好了,上面写了那么多,是为了介绍 循环节的基本定理
    下面开始正题,开始公式的证明

    我们对于A 进行分解,得到素因子集合

    下面我们把素因子分为2类
    (1) (Pi,C) == 1
    (2) (Pi,C) != 1

    对于第一类情况,我们容易由定理4知道对于每一个 Pi,得到了Li ( 数对 (Pi,C) 的最小循环节长) 必然是 Phi(C) 的因子
    对于第二类情况,由定理5,”消去 因子”,转化为第一类的情况.得到了 这类的素因子Pi 的Li 依然为Phi(C) 的因子
    @2011-01-11 对于第二类情况的更新

    由循环定义得到

    (Pi^ci)^x = (Pi^ci)^(x + Li) (mod C) (x >= spos)

    那么我们假设C = Pi^CNT * B, 其中 (B, Pi) = 1

    那么

    (Pi^ci)^x = (Pi^ci)^(x + Li) (mod Pi^CNT * B)

    同时消去Pi因子,最终可以得到:

    [Pi^a] * [Pi^ci]^b = [Pi^a] * [Pi^ci]^b * [Pi^ (ci * Li)] (mod B)

    (Pi^a, B) = 1,逆元存在,2边同时乘上 Pi^a的逆元

    [Pi^ci]^b = [Pi^ci]^b * [Pi^ (ci * Li)] (mod B)

    ===>

    [Pi^ci] ^b = [Pi^ci] ^ (b + Li) (mod B)

    Li 为Phi(B)的因子,B为C的因子,既

    Li | Phi(B), B| C

    下面我们构造所有素因子的循环,既求他们的LCM,那由于定理6不难知道,(A,C) 的最小循环节长 L | LCM(L1,L2…LK)
    而Li |Phi(C)

    所以 L | Phi(C)

    之后由定理1,2 公式得证.

    推荐题目:

    http://acm.fzu.edu.cn/problem.php?pid=1759
    Problem 1759 Super A^B mod C 直接运用公式
    http://acm.hdu.edu.cn/showproblem.php?pid=3221
    2009年shanghai B,得到DP以后利用公式
    http://acm.hdu.edu.cn/showproblem.php?pid=2837
    Calculation 递归,注意细节
    PS. 标程在某个细节处理错误,可是数据是对的.

  • 相关阅读:
    我的游戏学习日志11——小结(1)
    我的游戏学习日志10——数字游戏策划(5)游戏策划的概念与分工
    我的游戏学习日志9——数字游戏策划(4)数字游戏的特征
    我的游戏学习日志8——数字游戏策划(3)数字游戏的概念
    我的游戏学习日志7——数字游戏策划(2)游戏的概念以及其学术上的分类
    我的游戏学习日志6——数字游戏策划(1)游戏理论发展
    我的游戏学习日志5——拳皇97_(不得不吹的经典)
    我的游戏学习日志4——冒险岛
    我的游戏学习日志3——三国志GBA
    C++小坑汇总
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2991675.html
Copyright © 2011-2022 走看看