92分求助
查看原帖
92分求助
701221
Chr0n1CleC楼主2022/10/28 13:53

时间复杂度 O(logr+logl+loglogl+rl)O(\log r + \log l + \log \log l + 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;
}
2022/10/28 13:53
加载中...