Algorithm 计算$a^{^nC\u r}$%prime

Algorithm 计算$a^{^nC\u r}$%prime,algorithm,math,modular-arithmetic,Algorithm,Math,Modular Arithmetic,我把我的问题上传为截图。意味着当p不除以x时,(x^y)mod p=x^(y mod(p-1))mod p。意味着当p不除以x时(x^y)mod p=x^(y mod(p-1))mod p。费马的小定理说 x^p mod p = x mod p or x^(p-1) mod p = 1 (if p does not divide x) 当p不除x时,我们可以使用此函数来减少计算x^m(m任意)的操作数: 将m除以(p-1),得到:s=(m mod p-1);不需要计算商 注意


我把我的问题上传为截图。

意味着当p不除以x时,(x^y)mod p=x^(y mod(p-1))mod p。

意味着当p不除以x时(x^y)mod p=x^(y mod(p-1))mod p。

费马的小定理说

x^p mod p = x mod p     or     x^(p-1) mod p = 1  (if p does not divide x)
p
不除
x
时,我们可以使用此函数来减少计算
x^m
m
任意)的操作数:

  • m
    除以
    (p-1)
    ,得到:
    s=(m mod p-1)
    ;不需要计算商
  • 注意
    m=(p-1)q+s
    x^(p-1)=1模p
    。所以
    • x^m=x^((p-1)q)x^s=(1^q)(x^s)mod p=x^(m mod p-1)
  • 然而,仍然存在的问题是如何计算

    choose(n,r) = n(n-1)...(n-r+1)/(r(r-1)...1) mod p-1
    
    附录

    对以上问题的进一步思考导致我们思考以下问题。我们有三个整数:

    c = choose(n,r)
    m = n(n-1)...(n-r+1)
    f = factorial(r)
    q = p-1
    
    满足

    c = m/f,                                 eq 1
    
    我们必须回答的问题是计算
    c mod q
    as是否有效

    (c mod q) = (m mod q)/(f mod q)          eq 2
    
    对吧??因为这将允许我们将
    choose(n,r)
    的计算减少到两系列模乘加一个除法(一种简单有效的算法)

    现在,
    eq 1
    可以重写为

     c*f = m
    
    这使我们能够将
    mod q
    应用于两侧:

     (c mod q)(f mod q) = (m mod q)          eq 3
    
    因为众所周知,
    mod
    与乘积(和和)进行换算,这正是我们将用于计算上述模乘序列的特性

    由于
    eq 3
    中涉及的树数量是整数,我们可以用
    (f mod q)
    除以两边,得到
    eq 2
    。我的答案现在已经完成了

    附录2

    我说我的答案现在已经完成了。不完全是。仍然存在的问题发生在
    f mod q=0
    时,在这种情况下,我们不能像上面那样划分
    eq 3
    。这种情况需要特殊处理,并将导致更复杂的算法


    一个值得尝试的想法是将代码> Q>代码>,即代码> P-1 < /代码>作为素数的乘积,并逐个考虑这些素数。拿一个,说

    t^e
    。我们知道,
    t^e
    必须除以阶乘
    f
    。因此,它也必须分割等式3的右侧。因此,我们必须在
    n,n-1,n-2,…,n-r+1
    中寻找足够的因子,这些因子可以被
    t
    整除,直到我们用
    t
    e
    整除。然后我们需要用相应的
    t
    的幂替换这些因子的商。对
    q=p-1
    中的所有素数重复此过程后,我们将在左侧得到
    f/q
    ,在右侧得到新的因子列表。这将是我们的新版
    eq 3
    。当然,新的
    f
    =f/q
    )也可以被
    q
    整除。因此,我们必须重复相同的过程,直到
    f mod q
    不再
    0
    。在这一点上,我们将能够除以并得到
    c mod q
    的值

    费马的小定理说

    x^p mod p = x mod p     or     x^(p-1) mod p = 1  (if p does not divide x)
    
    p
    不除
    x
    时,我们可以使用此函数来减少计算
    x^m
    m
    任意)的操作数:

  • m
    除以
    (p-1)
    ,得到:
    s=(m mod p-1)
    ;不需要计算商
  • 注意
    m=(p-1)q+s
    x^(p-1)=1模p
    。所以
    • x^m=x^((p-1)q)x^s=(1^q)(x^s)mod p=x^(m mod p-1)
  • 然而,仍然存在的问题是如何计算

    choose(n,r) = n(n-1)...(n-r+1)/(r(r-1)...1) mod p-1
    
    附录

    对以上问题的进一步思考导致我们思考以下问题。我们有三个整数:

    c = choose(n,r)
    m = n(n-1)...(n-r+1)
    f = factorial(r)
    q = p-1
    
    满足

    c = m/f,                                 eq 1
    
    我们必须回答的问题是计算
    c mod q
    as是否有效

    (c mod q) = (m mod q)/(f mod q)          eq 2
    
    对吧??因为这将允许我们将
    choose(n,r)
    的计算减少到两系列模乘加一个除法(一种简单有效的算法)

    现在,
    eq 1
    可以重写为

     c*f = m
    
    这使我们能够将
    mod q
    应用于两侧:

     (c mod q)(f mod q) = (m mod q)          eq 3
    
    因为众所周知,
    mod
    与乘积(和和)进行换算,这正是我们将用于计算上述模乘序列的特性

    由于
    eq 3
    中涉及的树数量是整数,我们可以用
    (f mod q)
    除以两边,得到
    eq 2
    。我的答案现在已经完成了

    附录2

    我说我的答案现在已经完成了。不完全是。仍然存在的问题发生在
    f mod q=0
    时,在这种情况下,我们不能像上面那样划分
    eq 3
    。这种情况需要特殊处理,并将导致更复杂的算法

    一个值得尝试的想法是将代码> Q>代码>,即代码> P-1 < /代码>作为素数的乘积,并逐个考虑这些素数。拿一个,说

    t^e
    。我们知道,
    t^e
    必须除以阶乘
    f
    。因此,它也必须分割等式3的右侧。因此,我们必须在
    n,n-1,n-2,…,n-r+1
    中寻找足够的因子,这些因子可以被
    t
    整除,直到我们用
    t
    e
    整除。然后我们需要用相应的
    t
    的幂替换这些因子的商。对
    q=p-1
    中的所有素数重复此过程后,我们将在左侧得到
    f/q
    ,在右侧得到新的因子列表。这将是我们的新版
    eq 3
    。当然,新的
    f
    =f/q
    )也可以被
    q
    整除。因此,我们必须重复相同的过程,直到
    fm