AtCoder Regular Contest 023
D
GCD区間
AtCoder
⌀ 2511
原题
← C→
翻译中…

Problem Statement

翻译中…

高橋君は、数列を作って、それに関していろいろ操作を施すのが好きです。特に、区間の和や区間の最大公約数を計算したりといった区間に関していろいろ操作を施すのが大好きです。

翻译中…

そこで、高橋君は、ある数列に関して、区間の最大公約数がとある値 $x$ となるような区間の数を数えることにしました。 高橋君は、プログラムを使ってこの問題を解いたのですが、長い数列になればなるほど、時間がとても掛かってしまうことに気づきました。

翻译中…

あなたの仕事は、高橋君のために、数列が長いときでも高速に動作するプログラムを書くことです。 また、オマケ機能として、同じ数列に対して、いくつか $x$ の候補があっても、全ての $x$ について計算できるよう、問い合わせ機能をつけてあげることにしました。

翻译中…

あなたには、 長さ $n$ の数列 $A=\{a_1,a_2,..,a_n\}$ が与えられます。また、問い合わせの数 $m$ と、 $x_1,x_2,..,x_m$ も与えられます。 それぞれの $x_i (1 ≦ i ≦ m)$ について、区間に含まれる全ての数の最大公約数が $x_i$ となるような区間 $[s,t] (1 ≦ s ≦ t ≦ n)$ の数を出力してください。

翻译中…

例えば、$A=\{1,2,4\}$ のとき、最大公約数が1となる区間は、$[1,1],[1,2],[1,3]$の3つであり、最大公約数が2となる区間は、$[2,2],[2,3]$ の2つであり、 最大公約数が4となる区間は、$[3,3]$ のみです。

翻译中…

Input

翻译中…

入力は以下の形式で標準入力から与えられる。

翻译中…

n m
a_1
a_2
:
a_n
x_1
x_2
:
x_m

翻译中…
  • $1$ 行目には、数列の長さを表す整数 $n (1 ≦ n ≦ 100,000)$ と問い合わせの数 $m (1 ≦ m ≦ 100,000)$ がスペース区切りで与えられる。
  • $2$ 行目から $n$ 行では、数列 $A$の値が与えられる。このうち $i$ 行目では数列 $A$ の $i$ 番目の値をそれぞれ表す整数 $a_i (1 ≦ a_i ≦ 10^9)$ が与えられる。
  • $n+2$ 行目から $m$ 行では調べたい値が与えられる。このうち $i$ 行目では $i$ 番目の問い合わせにおける $x$ の値をそれぞれ表す整数 $x_i (1 ≦ x_i ≦ 10^9)$ が与えられる。
翻译中…

Output

翻译中…

それぞれの問い合わせに対する答えを順番に 1 行目から $m$ 行出力せよ。出力の末尾にも改行をいれること。

翻译中…

样例

Input #1
3 4
1
2
4
1
2
3
4
Output #1
3
2
0
1
与えられる数列は、問題文中のものです。
Input #2
6 7
12
6
4
3
2
1
1
2
3
4
6
12
8
Output #2
13
3
1
1
2
1
0
Input #3
5 8
4
6
42
28
41
1
2
4
6
7
14
14
41
Output #3
4
4
1
2
0
1
1
1
题目信息
题号
arc023_4
时间限制
3 s
内存限制
256 MB

题面与样例版权归 AtCoder 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。