题目链接:点击打开链接
#include<cstdio>
#include<cmath>
#define LL long long
using namespace std;
LL l,r,k;
/*
LL qpow(LL x,LL y)
{
LL ans=1;
while(y)
{
if(y&1)
ans*=x;
x*=x;
y>>=1;
}
return ans;
}
int main()
{
while(~scanf("%lld%lld%lld",&l,&r,&k))
{
LL a=1LL*log(l*1.0)/log(k*1.0)+1e-10; // 加精度逼近
LL b=1LL*log(r*1.0)/log(k*1.0)+1e-10;
while(qpow(k,a)<l)
{
a++;
}
while(qpow(k,b)>r)
{
b--;
}
if(a>b)
{
puts("-1");
continue;
}
LL ans=qpow(k,a);
printf("%lld ",ans);
for(LL i=a+1;i<=b;i++)
{
ans*=k;
printf("%lld ",ans);
}
puts("");
}
return 0;
}*/
int main()
{
while(~scanf("%lld%lld%lld",&l,&r,&k))
{
bool flag=1;
for(LL ans=1;;ans*=k)
{
if(ans>=l&&ans<=r)
{
if(!flag)
printf(" ");
printf("%lld",ans);
flag=0;
}
if(ans>r/k) // 这里要提前判断,防止下一个 ans 爆 LL 而造成判断失误
break;
}
if(flag)
puts("-1");
else
puts("");
}
return 0;
}