rev[x]=(Ai=xとなるようなi、そのようなiが存在しないなら-1)
div[x]={i ∣ Ai≡0 (mod x)}
とします。
M=max(A)として、
div[x](1≤x≤M)は以下のように処理することでO(MlogM)で全てのxについて求めることができます。
for x in range(M + 1):
if x == 0:
continue
for i in range(x, M + 1, x):
if rev[i] != -1:
div[x].append(rev[i])
次に、全てのxに対して、div[x]を昇順に並べ替えます。
あとは、クエリごとに、L,Rについて、div[X]を2分探索することにより、
この問題を全体でO(M(logM)2+QlogN)で解くことができます。