memo[ n ] = n番目の数
const int N = 2000 * 2000;
lli memo[N];
lli A(lli n, lli p, lli q)
{
if (n < N) {
lli &ret = memo[n];
if (ret != -1) return ret;
return ret = A(n / p, p, q) + A(n / q, p, q);
}
return A(n / p, p, q) + A(n / q, p, q);
}
class InfiniteSequence {
public:
long long calc(long long n, int p, int q)
{
fill(memo, memo + N, -1);
memo[0] = 1;
return A(n, p, q);
}
};