大数之和的模数

时间:2016-01-29 19:17:35

标签: c++ math

好吧,我需要计算下一个数字的模数10 ^ 9 + 7: 2 ^(N-1)2(N-2)+ ... + 2(N-P) 其中值是: N'LT; = 5000 P< = 5000 所以基本上,最高可能的数字是: 2 ^(4999)+ 2 ^(4998)+ ... + 2 ^ 0 这是我尝试过的,但我想这还不足以覆盖这个大数字。

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;
} 

此代码应计算每2 ^(n-someNumber)的模数,然后将所有模数%10 ^ 9 + 7相加以获得最终数。 我对大数字不太好,所以请帮忙。 这个代码是否会覆盖尽可能多的情况? 提前谢谢,

0 个答案:

没有答案