思路:
看到数据大小想到dfs肯定暴了,看题中给的数列,化成二进制,发现与n有某种关系,剩下的就可以敲代码了
。。一般看到这样的数据大小要先想到位运算
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
ll qp(ll a,ll b){
ll ans = 1;
ll base = a;
while(b){
if(b&1) ans = ans*base%mod;
base = base*base%mod;
b = b >> 1;
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
ll n,k;
cin >> n >> k;
ll ans = 0;
for(int i = 29;i>=0;i--){
if((1<<i)&n){ ans = (ans + qp(k,i))%mod;}
}
cout << ans << '\n';
return 0;
}