给出一个GP总和(1-((n-1)/ n)^ r)= P / Q,当r大并输出(P * Q ^(-1)时,如何计算该P / Q分数)%1000000007,其中Q ^(-1)是Q模1000000007的模逆。
我可以使用模幂计算(n-1)^ r和n ^ r,然后使用费马小定理使用模逆公式打印P * Q ^(-1),但这是不正确的,因为我认为( n ^ r)模逆与Q ^(-1)不同,如果我在不使用模幂的情况下计算Q,则C ++中甚至会长时间溢出。 所以,请指导我我在做什么错?
ll modInverse(ll a, ll m)
{
ll ans = power(a, m-2, m); //for finding modular inverse
return ans;
}
ll power(ll x, ll y, ll p)
{
ll res = 1;
x = x % p;
while (y > 0) // ll is long long
{ //p=1000000007;
if (y & 1) //for calculating n^r and (n-1)^r
res = (res*x) % p;
y = y>>1;
x = (x*x) % p;
}
return res;
}
计算P * Q ^(-1)%1000000007由于溢出以及如果使用mod 1000000007给出错误值而限制了溢出,则对于大值给出了意外的答案。 我使用费马小定理来计算模逆和快速幂方法来评估n ^ r。
对于
答案 0 :(得分:-1)
我们必须找到一个值x,使得(Q x)%MOD =1。这意味着(Q%MOD x%MOD)%MOD =1。对于分母,您可以使用模幂求Q%MOD,即(n ^ r)%MOD。然后将Q%MOD替换为Q'。这意味着(Q'* x)MOD = 1。因此,找到Q'的模逆。 (MOD = 1000000007)