【发布时间】:2013-11-14 19:40:03
【问题描述】:
我正在做一个密码练习,我正在尝试计算 (2n-1)mod p 其中 p 是一个素数
最好的方法是什么?我正在使用 C,所以当 n 很大时 2n-1 变得太大而无法容纳
我遇到了等式 (a*b)modp=(a(bmodp))modp,但我不确定这是否适用于这种情况,因为 2n-1 可能是素数(或者我不确定如何分解这个)
非常感谢您的帮助。
【问题讨论】:
-
n和p的数值范围非常相关。
-
P 是 10 位素数(比如 1000000007),n 最多为 9 位。
-
是 999999999 之前的任何 10 位素数,还是有特定的上限? 2^32 ≈ 4*10^9 是 10 位数字,所以问题是您是否可以对任何小于 p 的数字进行平方而不溢出本机 64 位整数类型。
-
我可以选择我的素数,比如说,我选择它为 1000000007(前 10 位素数)