C++ 大数和的模
我需要计算下一个数的模10^9+7: 2^(n-1)+2(n-2)+…+2(n-p) 其中值为:C++ 大数和的模,c++,math,C++,Math,我需要计算下一个数的模10^9+7: 2^(n-1)+2(n-2)+…+2(n-p) 其中值为: 不。提示:(x+y)mod z==((x mod z)+(y mod z)mod z)。我就是这么做的,不是吗@EJPNo,这不是你做的。您将所有的数字相加,这将溢出,然后取模数。方程式显示了如何避免溢出。每次加法后都必须取模。power可能只返回long(从10^9
不。提示:
(x+y)mod z==((x mod z)+(y mod z)mod z)
。我就是这么做的,不是吗@EJPNo,这不是你做的。您将所有的数字相加,这将溢出,然后取模数。方程式显示了如何避免溢出。每次加法后都必须取模。power
可能只返回long
(从10^9<2^31开始)。虽然sol需要额外的精度。我更改了代码,现在可以了吗@埃吉普诺。提示:(x+y)mod z==((x mod z)+(y mod z)mod z)
。我就是这么做的,不是吗@EJPNo,这不是你做的。您将所有的数字相加,这将溢出,然后取模数。方程式显示了如何避免溢出。每次加法后都必须取模。power
可能只返回long
(从10^9<2^31开始)。虽然sol需要额外的精度。我更改了代码,现在可以了吗@EJP
long long power(int x,int n)//calculates (x^n) % 10^9+7
{
long long sol=1;
long long b=x;
while(n){
if(n&1==1){
sol*=b;
sol%=1000000007;
}
n>>=1;
b*=b;
b%=1000000007;
}
return sol;
}
long long calculate(int n,int p){//calculates 2^(n-1)+2^(n-2)+...+2^(n-p)
long long ret=power(2,n-1);p-=1;
while(p--!=0)
ret=(ret%1000000007+(ret/2)%1000000007)%1000000007;
return ret;
}