如果gcd不是1

时间:2015-06-22 05:01:51

标签: math modulo

我必须找到(p ^ e-1)/(p-1)mod 1000000007,其中p是素数。 如果gcd(p-1,1000000007)不是1,则不定义(p-1)的模逆。此外,(p ^ e-1)可被(p-1)(几何级数的和)整除。此外,由于p,e< = 10 ^ 18,我无法找到(p ^ e-1)。那么如何找到(p ^ e-1)/(p-1)mod 1000000007

4 个答案:

答案 0 :(得分:2)

当你分割整数,然后取模数时,你必须以特殊的方式处理模数的素因子。考虑例如6/3 mod 3.如果我们只是试着写6/3 mod 3 =(6 mod 3)/(3 mod 3)我们会有未定义的0/0,而正确答案当然是6/3 mod 3 = 2 mod 3 = 2.

所以我们需要做的是从分子和分母中分解3的幂,并将它们分开(通过减去指数)。所以我们有6 = 3 ^ 1 x 2,3 = 3 ^ 1 x 1,所以6/3 = 3 ^ 1/3 ^ 1 x 2/1 = 3 ^ {1-1} x 2 = 3 ^ 0 x 2 = 2 mod 3.让我们尝试一个更复杂的例子:18/6 mod 3 =(3 ^ 2 x 2)/(3 ^ 1 x 2)= 3 ^ {2-1} x 2/2 = 3 x 1 = 3 mod 3 = 0。

这是另一个例子:36/18 =(3 ^ 2 x 4)/(3 ^ 2 x 2)= 3 ^ {2-2} x 4 x 2 ^ { - 1} mod 3 = 4 x 2 mod 3(因为2 ^ { - 1} = 2 mod 3)= 8 mod 3 = 2.一般情况下,我们减去3部分幂的指数,并将mod 3反转为3部分除数的非幂。 / p>

在你的例子中,我们必须找到进入p ^ e-1的最高功率m 1000000007,并且重写p ^ e-1 = 1000000007 ^ mxs,其中s相对于1000000007的素数。我们也这样做对于p-1 = 1000000007 ^ nxt,其中t是相对于1000000007的素数。然后商(p ^ e-1)/(p-1)= 1000000007 ^ {mn} xsxt ^ { - 1}。如果m> n,答案是0 mod 1000000007;否则答案是s x t ^ { - 1} mod 1000000007.存在t mod 1000000007的倒数,因为t是1000000007的相对素数;逆可以通过欧几里德算法的修改版本来计算。

答案 1 :(得分:1)

由于1000000007是素数,因此有两种情况。

案例1:1000000007是p-1的因子。然后p mod 1000000007 = 1,所以1 + p + p ^ 2 + ... + p ^(e-1)= 1 + 1 + 1 ... + 1 = e mod 1000000007。

情况2:1000000007是p-1的相对素数,你可以计算1 /(p-1)为(p-1)^ 1000000005 mod 1000000007,或者使用Euclid算法,你可以计算通过平方使用取幂来相对快速地修正mod 1000000007。

答案 2 :(得分:0)

1000000007 is a prime number,所以如果p-1 < 1000000007 gcd将始终为1.如果p-1是1000000007的倍数,那么根据定义,它是零模1000000007,因此没有反向定义。

答案 3 :(得分:0)

你有两个案例

  1. p-1是大元素1000000007的互质。 p <= 1000000007始终如此,对于较大的p通常也是如此。在这种情况下,您似乎知道该怎么做 - 使用算法查找p-1的模块化逆,即aa * (p - 1) == 1 mod 1000000007

  2. p-11000000007的倍数 - 即p-1 == k*1000000007。在这种情况下,p == k*1000000007 + 1

    让我们把注意力转向表达式的顶线

    p^e - 1 == (k * 1000000007 + 1) ^ e - 1
    

    这可以通过二项式扩展扩展为

    ((k*1000000007)^e + e*(k*1000000007)^(e-1) + ... + 1) - 1
    

    但请记住,(k*1000000007) == p-1。所以,扩展是

    ((p-1)^e + e*(p-1)^(e-1) + ... + e*(p-1))
    

    我们可以通过p-1进行划分,并留下

    ((p-1)^(e-2) + e*(p-1)^(e-2) + .... + e)
    

    我们知道在这种情况下,包含p-1的所有术语都是0 mod 1000000007,所以我们只剩下最后一个术语e。因此,在这种情况下,表达式(p^e - 1) / (p - 1) mod 1000000007的结果为e - 您找不到p-1的模数逆,因为您不能,但您也不需要。 / p>