首先我们在这里再写一下这个式子:

\prod_{i = A}^{B}\prod^i_{j=1}(\frac{i}{j})^{\lfloor \frac{i}{j} \rfloor}\ (\bmod\ 19260817)i=ABj=1i(ji)ji (mod 19260817)

如果只是看着而不给它来一个大手术是永远都做不出来的..除非你有天河一号

然后开始它的变形记:

\prod_{i = A}^{B}\prod^i_{j=1}i^{\lfloor \frac{i}{j} \rfloor} \times inv(j)^{\lfloor \frac{i}{j} \rfloor} (\bmod\ 19260817)i=ABj=1iiji×inv(j)ji(mod 19260817)

\prod_{i = A}^{B}\prod^i_{j=1}i^{\lfloor \frac{i}{j} \rfloor} \times \prod_{i = A}^{B}\prod^i_{j=1}inv(j)^{\lfloor \frac{i}{j} \rfloor} (\bmod\ 19260817)i=ABj=1iiji×i=ABj=1iinv(j)ji(mod 19260817)

到这里应该还是比较简单的吧..只是拆成了逆元然后分开了..

如果不会逆元请出门P3811P3811不送..

好的继续..

\prod_{i = A}^{B}i^{\sum_{j=1}^{i}\lfloor \frac{i}{j} \rfloor} \times \prod_{i = A}^{B} \prod^B_{j = 1} inv(j) ^ {\lfloor \frac{i}{j} \rfloor} (\bmod\ 19260817)i=ABij=1iji×i=ABj=1Binv(j)ji(mod 19260817)

前面一半应该都没有什么问题把..用了幂的乘积的一个公式:x^a \cdot x^b = x^{a+b}xaxb=xa+b

后面一半就是一个变形..把jj弄到ii前面去..

你可能会觉得这个多乘了一些奇怪的东西,毕竟以前的jj是到ii,然而现在到了BB..

但是并不会多..因为如果j > ij>i,那么\lfloor \frac{i}{j} \rfloor=0ji=0,对于幂来说算出来的结果就是11,乘上一个11并不会造成什么奇怪的结果..

好的继续..

\prod_{i = A}^{B}i^{\sum_{j=1}^{i}\lfloor \frac{i}{j} \rfloor} \times \prod_{j = 1}^{B} (\prod^B_{i = 1} inv(j) ^ {\lfloor \frac{i}{j} \rfloor} \times \prod^A_{i = 1} j ^ {\lfloor \frac{i}{j} \rfloor}) (\bmod\ 19260817)i=ABij=1iji×j=1B(i=1Binv(j)ji×i=1Ajji)(mod 19260817)

\prod_{i = A}^{B}i^{\sum_{j=1}^{i}\lfloor \frac{i}{j} \rfloor} \times inv(\prod_{j = 1}^{B} j ^ {\sum_{i=1}^{B}\lfloor \frac{i}{j} \rfloor}) \times \prod_{j = 1}^{A} j ^ {\sum_{i=1}^{A}\lfloor \frac{i}{j} \rfloor} (\bmod\ 19260817)i=ABij=1iji×inv(j=1Bji=1Bji)×j=1Aji=1Aji(mod 19260817)

然后到这里就可以做了..

首先对于\sum_{j=1}^{i}\lfloor \frac{i}{j} \rfloorj=1iji⌋这个玩意可以使用一种神奇的变形变成一个可以方便求的东西..

这个在这篇题解的下方有有关证明,所以这里不再赘述..

然后就是后面那一坨东西了..

那一堆东西主要要求的东西就是\prod_{j = 1}^{x} j ^ {\sum_{i=1}^{x}\lfloor \frac{i}{j} \rfloor}j=1xji=1xji⌋...

我们可以从xx->x+1x+1的时候变多的地方来考虑..

首先多的就是(x+1) ^ {\sum_{i=1}^{x+1}\lfloor \frac{i}{x+1} \rfloor}(x+1)i=1x+1x+1i

然而我们发现这个玩意就是x+1x+1..

然后考虑其他的地方..

对于11~xx的jj,只可能在指数上面多了个\lfloor \frac{x+1}{j} \rfloorjx+1

如果然后我们还可以发现这个增多的jj只会是x+1x+1的因子..

然后这些增多的量就是x+1x+1的因子的乘积了..

然后这个可以想一想,反正可以用线性筛搞一搞..

这个变化量求出来以后,就可以用两次前缀积搞掉了..

下面就是丑陋的代码..

#include <bits/stdc++.h>

using namespace std;

#define reg register
#define space putchar(' ')
#define enter putchar('\n')
#define pin(a) printf("%d", a)

typedef long long ll;

inline int read() {
    reg int s = 0, t = 0; reg char ch = getchar();
    while(ch > '9' || ch < '0') t |= ch == '-', ch = getchar();
    while(ch >= '0' && ch <= '9') s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
    return t ? -s : s;
}

const int mod = 19260817;
const int MAXN = 1000000;

bitset<MAXN + 1>Check;

inline ll ksm(reg ll a, reg int k) {
    reg ll s = 1;
    while(k) {
        if(k & 1) s = s * a % mod;
        a = a * a % mod;
        k >>= 1;
    }
    return s;
}

int main() {
    reg int tot = 0;
    reg int f[MAXN + 1] = {1, 1};
    reg int d[MAXN + 1];
    reg int h[MAXN + 1];
    reg int prime[MAXN / 10];
    h[0] = h[1] = d[1] = 1;
    for(reg int i = 2; i <= MAXN; i++) {
        if(!Check[i]) prime[++tot] = i, d[i] = 2, h[i] = i;
        for(reg int j = 1; j <= tot && i * prime[j] <= MAXN; j++) {
            reg int pr = prime[j];
            Check[i * pr] = 1;
            if(i % prime[j] == 0) {
                reg int tmp = i, s = 2, F = 1;
                while(tmp % pr == 0) tmp /= pr, F += s, s++;
                d[i * pr] = d[tmp] * s;
                h[i * pr] = 1LL * ksm(h[tmp], d[i / tmp * pr]) * ksm(pr, 1LL * F * d[tmp] % (mod - 1)) % mod;
                break;
            }
            d[i * pr] = d[i] << 1;
            h[i * pr] = 1LL * h[i] * h[i] % mod * ksm(pr, d[i]) % mod;
        }
    }
    for(reg int i = 2; i <= MAXN; i++) {
        d[i] += d[i - 1];
        f[i] = 1LL * f[i - 1] * ksm(i, (d[i] %= mod - 1)) % mod;
    }
    for(reg int i = 2; i <= MAXN; i++) h[i] = 1LL * h[i - 1] * h[i] % mod;
    for(reg int i = 2; i <= MAXN; i++) h[i] = 1LL * h[i - 1] * h[i] % mod;
    reg int T = read();
    for(reg int QwQ = 0, A, B; QwQ < T; QwQ++)
        A = read() - 1, B = read(),
        pin(ksm(f[A], mod - 2)  * f[B] % mod * ksm(h[B], mod - 2) % mod * h[A] % mod),
        enter;
    return 0;
}