k=1的时候明显答案是
k>=3的时候可以枚举值域,算出对应的长度然后把贡献加起来
k=2的时候推式子,考虑计算的答案,那么相当于只需要推的式子。
设,对于部分的答案容易算出是;
对于的部分我们列出式子
然后就做完了。
ll ksm(ll a, ll b) {
ll ans = 1;
for (; b; b >>= 1, a *= a)
if (b & 1)ans *= a;
return ans;
}
ll calc(ll n) {
ll x = sqrt((long long)n);
return x * (x - 1) * (2 * x - 1) / 3 + x * (x - 1) / 2 + x * (n - x * x + 1);
}
int main() {
ll l = fast_IO::read(), r = fast_IO::read(), k = fast_IO::read();
if (k == 1)fast_IO::write((l + r) * (r - l + 1) / 2);
else if (k == 2)fast_IO::write(calc(r) - calc(l - 1));
else {
ll ans = 0;
for (ll i = 1; ksm(i - 1, k) <= r; ++i) {
ll L = ksm(i - 1, k), R = ksm(i, k) - 1;
L = max(L, l);
R = min(R, r);
if (L <= R)ans += (R - L + 1) * (i - 1);
}
fast_IO::write(ans);
}
return 0;
}