时间复杂度 O(logr+logl+loglogl+r−l)
#include<stdio.h>
#define ll long long
inline ll read()
{
register ll ret = 0;
register char ch = getchar();
while (ch < '0' || ch > '9')
ch = getchar();
while (ch >= '0' && ch <= '9')
ret = (ret << 1) + (ret << 3) + (ch ^ 48), ch = getchar();
return ret;
}
inline unsigned ll Log(register unsigned ll Top, register unsigned ll Down)
{
register unsigned ll ret = 0;
while (Top)
++ ret, Top /= Down;
return ret;
}
inline unsigned ll qpow(register unsigned ll a, register unsigned ll b)
{
register unsigned ll ret = 1;
while (b)
{
if (b & 1)
ret = ret * a;
a = a * a;
b >>= 1;
}
return ret;
}
int main()
{
register unsigned ll l = read(), r = read(), w = read();
register unsigned ll L = Log(l, w) - 1, R = Log(r, w) - 1;
if (qpow(w, L) < l)
++ L;
if (L > R)
printf("-1");
else
{
register ll ans = qpow(w, L);
while (L <= R)
printf("%lld ", ans), ++ L, ans *= w;
}
return 0;
}