Cod sursa(job #2773504)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 7 septembrie 2021 12:42:09
Problema Zombie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>
#define MOD 1000000007

using namespace std;

long long a, b, n, x;
long long cn, ca, sol=1, soll=1, solll=1;

int main (){
    ///a^n*x + b*(a^n-1)/(a-1)
    cin>>a>>b>>n>>x;

    ///a^n * x
    sol=x;
    cn=n; ca=a;
    while(cn){
        if(cn%2 == 1)
            sol = (long long)sol * ca % MOD;
        cn/=2;
        ca=(long long)ca * ca % MOD;
    }

    ///b * (a^n-1)
    soll=1;
    cn=n; ca=a;
    while(cn){
        if(cn%2 == 1)
            soll = (long long)soll * ca % MOD;
        cn/=2;
        ca=(long long)ca * ca % MOD;
    }
    soll = (soll + MOD - 1) % MOD;
    soll=(long long)soll * b % MOD;

    ///soll / (a-1)
    ///soll * (a-1)^-1
    ///soll * (a-1)^(MOD-2) % MOD
    if(a == 1){
        soll=n%MOD;
    }else{
        solll=1;
        cn=MOD-2;
        ca=a-1;
        while(cn != 0){
            if(cn%2 == 1)
                solll = (long long)solll * ca % MOD;
            cn/=2;
            ca = (long long)ca * ca % MOD;
        }
        soll = (long long)soll * solll % MOD;
    }

    sol = (sol%MOD + soll%MOD)%MOD;
    cout<<sol;
    return 0;
}