algorithm - 是否有计算 x 模 y 的乘法阶数的算法(对于 y > 1000 execpt mod(x,y).multipliative_order())?

标签 algorithm math discrete-mathematics

我需要计算乘法阶来解决离散对数问题。我尝试在下面使用此算法,但它不适用于大数字。

def multiplicativeOrder(A, N) : 
    if (GCD(A, N ) != 1) : 
        return -1

    result = 1

    K = 1
    while (K < N) : 

        result = (result * A) % N  

        if (result == 1) : 
            return K 

        K = K + 1

    return -1

最佳答案

基于因式分解 n 然后应用大量数学运算,有更快的方法可以做到这一点。然而,作为基线改进,从 O(n)O(sqrt(n)) 使用小步大步的想法。与替代方案相比,它也相当简单。

def multiplicative_order2(a, n):
    if gcd(a, n) != 1:
        return -1

    visited = {}
    count = 0

    count = slow = fast = 1
    while fast not in visited:
        visited[slow] = count
        count += 1
        slow = (slow * a) % n
        fast = (fast * slow) % n

    return count * (count + 1) // 2 - visited[fast]

关于algorithm - 是否有计算 x 模 y 的乘法阶数的算法(对于 y > 1000 execpt mod(x,y).multipliative_order())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112573/

相关文章:

math - 在已知并固定相机型号时校正鱼眼失真

javascript - 用三个数字创建一个百分比

math - 具有 k 个元素的集合可以分成多少个恰好有 n 个部分的不同分区?

c++ - 有没有办法在 C++ 中实现 Python 的 'separator' .join() 的模拟?

c - 如何生成一组数字

algorithm - `2^n - 1` : how is it constructed? 的类 De Bruijn 序列

python - 有效计算笛卡尔积中总和高于特定数字的集合

c# - 如何将字符串数组连接成单个字符串?

python - 有没有更有效的实现方式?

java - 为什么字节图比位图快?