how to calculate 2^n modulo 1000000007 , n = 10^9

早过忘川 提交于 2019-12-17 20:22:53

问题


what is the fastest method to calculate this, i saw some people using matrices and when i searched on the internet, they talked about eigen values and eigen vectors (no idea about this stuff)...there was a question which reduced to a recursive equation f(n) = (2*f(n-1)) + 2 , and f(1) = 1, n could be upto 10^9.... i already tried using DP, storing upto 1000000 values and using the common fast exponentiation method, it all timed out im generally weak in these modulo questions, which require computing large values


回答1:


f(n) = (2*f(n-1)) + 2 with f(1)=1

is equivalent to

(f(n)+2) = 2 * (f(n-1)+2)
         = ...
         = 2^(n-1) * (f(1)+2) = 3 * 2^(n-1)

so that finally

f(n) = 3 * 2^(n-1) - 2

where you can then apply fast modular power methods.




回答2:


Modular exponentiation by the square-and-multiply method:

function powerMod(b, e, m)
    x := 1
    while e > 0
        if e%2 == 1
            x, e := (x*b)%m, e-1
        else b, e := (b*b)%m, e//2
    return x



回答3:


//Include library

const int mod = 1e9+7;

//Here base is assumed to be 2
int cal_pow(int x){
    int res;
    if (x == 0) res=1;
    else if (x == 1)    res=2;
    else {
        res = cal_pow(x/2);
        if (x % 2 == 0) 
            res = (res * res) % mod;
        else
            res = (((res*res) % mod) * 2) % mod;
    }
    return res;
}

int main(){
    int n, ans;
    cin >> n;
    ans = cal_pow(n);
    cout << ans;
    return 0;   
}


来源:https://stackoverflow.com/questions/23846699/how-to-calculate-2n-modulo-1000000007-n-109

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!