usingnamespacestd; using ll = longlong; constlonglong MOD = 1e9 + 7;
ll quick(ll a, ll b){ if(b == 0) { return1; } longlong t = quick(a, b / 2); return b % 2 == 0 ? t % MOD * t % MOD % MOD : t % MOD * t % MOD * a % MOD % MOD; }
ll sum(ll a, ll b){ //计算a^1+a^2+a^3+...+a^b,一共b项 if(b == 0 || a == 0) return0; if(b == 1) //二分出口 return a; if(b % 2 == 0) return ((1 + quick(a, b / 2)) * sum(a, b / 2)) % MOD; else return ((1 + quick(a, b / 2)) * sum(a, b / 2) + quick(a, b)) % MOD; }
intmain(){ ll a, n; cin >> a >> n; //sum(a,n)计算n项,题目要求计算(n+1)项,需加a^0 cout << sum(a, n) + 1 << endl; return0; }