この問題は、「素因数分解」「鳩ノ巣原理」を利用して解くことができます。
数列 が区間 において「pairwise coprime」であるとは、
「任意の素数 に対して、 の中に の倍数は高々個である」と同値です。
( の倍数が複数あれば、それらの は の倍数となり、「pairwise coprime」ではなくなる。
また、「pairwise coprime」でなければ、 となる 、 はともに の素因数の倍数になる。)
よって、数列 の各要素を素因数分解し、区間 において(異なる要素に)重複する素因数があるかを調べれば良いです。
実装では、map などを用いて各素数に番号を割り振ると良いです。
素因数分解は、各整数 で行うことができます。
(エラトステネスの篩を用いた方法により、前処理 、各整数 で行うことも出来ます。)
また、 より各整数は 個以上の素因数を持ちます。数列 に含まれる素因数の種類数を とすると、
鳩ノ巣原理より、長さが を超える区間では必ず素因数が重複します。
重複が発生した時点でクエリの探索を終了することで、各クエリ で処理することができます。
であるため、 は最大でも です。
全体として、「各要素の素因数分解」「各素数へ番号の割り振り」「各クエリの処理」を行うため、
で問題を解くことが出来ます。
この問題の解法や原案の一部は mts さんの協力によるものです。ありがとうございます。