行列積の定義より,Ax,y2=∑k=1NAx,k×Ak,yです.
Aの各要素が何を表してるかを考えると,求めたいものは
「xの正の約数のうちyで割り切れるものの個数」と言い換えることができます.
よってxがyで割り切れない場合の答えは明らかに0です.以降xはyで割り切れるとします.
仮定より,xはある整数x′を用いてx=x′×yと表すことができます.
実は求めたい答えは「x′の正の約数の個数」と一致することがわかります.
なぜならば,x′の正の約数にyをかけたものは明らかにxの約数であり,かつyの倍数でもあるからです.
あとはEratosthenesの篩などの高速に素因数分解ができるアルゴリズムを用いて各クエリに高速に答えることができればよいです.
その場合の時間計算量は前計算でO(NloglogN),各クエリにO(log(xi÷yi))で答えることができるため,
全体の時間計算量はM=max(xi÷yi)としてO(NloglogN+QlogM)となり十分高速です.
一部の高速な言語での前計算なしでの各クエリO(xi÷yi)も許容します.その場合の全体の時間計算量は上で用いたMを用いて
O(QM)です.