Math 如何正确使用PowMod?

Math 如何正确使用PowMod?,math,Math,如果必须执行以下计算: 正确的实施方法是什么 b^-c * powmod(g,s_3, p) 或 或 或 所以 g^s_3%p和b^-c%p应使用powmod解决。powmod的正确实现取决于您 也许对你有帮助 所以 g^s_3%p和b^-c%p应使用powmod解决。powmod的正确实现取决于您 可能会对您有所帮助。最后的%p当然是必需的,否则您可能会得到比p更大的结果 b^-c在这种情况下是极不正确的,因为它无法知道这是一个模幂运算,与正指数不同,它不仅是一个性能问题,也是一个正确性问

如果必须执行以下计算:

正确的实施方法是什么

b^-c * powmod(g,s_3, p)

所以

g^s_3%p
b^-c%p
应使用
powmod
解决。powmod的正确实现取决于您

也许对你有帮助

所以

g^s_3%p
b^-c%p
应使用
powmod
解决。powmod的正确实现取决于您


可能会对您有所帮助。

最后的
%p
当然是必需的,否则您可能会得到比
p
更大的结果

b^-c
在这种情况下是极不正确的,因为它无法知道这是一个模幂运算,与正指数不同,它不仅是一个性能问题,也是一个正确性问题:正常的负指数给出一个分数结果,这在这里毫无意义

通过删除只留下最后一个建议:


(powmod(b,-c,p)*powmod(g,s_3,p))%p
最后的
%p
当然是必需的,否则你会得到比
p
大得多的结果

b^-c
在这种情况下是极不正确的,因为它无法知道这是一个模幂运算,与正指数不同,它不仅是一个性能问题,也是一个正确性问题:正常的负指数给出一个分数结果,这在这里毫无意义

通过删除只留下最后一个建议:


(powmod(b,-c,p)*powmod(g,s_3,p))%p
取决于powmod是否能处理负指数,最后一个是正确的。前两个具有不可解释的
b^-c
(或者它被解释为对位序列的
XOR
操作),第三个的结果可能大于
p
,因为两个余数的乘积mod
p
可以与
(p-1)^2一样大

要获得正确的负指数,请使用费马的小定理:

对于任何素数
p
a%p=0
一个人拥有
a^(p-1)%p==1

因此,完整的计算是

(powmod(b, p-1-(c%(p-1)),p) * powmod(g,s_3,p) ) % p

根据powmod是否可以处理负指数,最后一个是正确的。前两个具有不可解释的
b^-c
(或者它被解释为对位序列的
XOR
操作),第三个的结果可能大于
p
,因为两个余数的乘积mod
p
可以与
(p-1)^2一样大

要获得正确的负指数,请使用费马的小定理:

对于任何素数
p
a%p=0
一个人拥有
a^(p-1)%p==1

因此,完整的计算是

(powmod(b, p-1-(c%(p-1)),p) * powmod(g,s_3,p) ) % p

(a*b)%c=((a%c)*(b%c))%c你能处理负指数吗?@LutzL aw我都没想过。似乎处理负指数(a*b)%c=((a%c)*(b%c))%c你的
powmod
处理负指数不是件小事吗?@LutzL aw我甚至没有想到这一点。处理负指数似乎不是件小事
(powmod(b,-c,p) * powmod(g,s_3, p)) % p
( a * b ) % c = (( a % c )*( b % c )) % c
(b^-c * g^s_3)) % p = ((b^-c % p)*(g^s_3 % p)) % p
(powmod(b, p-1-(c%(p-1)),p) * powmod(g,s_3,p) ) % p