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