#include<bits/stdc++.h>
using namespace std;
#define ll long long int
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t;
cin >> t;
while (t--) {
ll n;
ll x;
cin >> n >> x;
ll arr[n];
for (ll i = 0; i < n; i++) {
cin >> arr[i];
}
vector < ll > factors;
for (ll i = 1; i * i <= x; i++) {
if (x % i == 0) {
if (i <= n) {
factors.push_back(i);
}
ll val = x / i;
if (i != val) {
if (val <= n) {
factors.push_back(val);
}
}
}
}
ll sz = factors.size();
ll ans = 0;
ll starti = 0;
ll startj = 0;
ll prefix[n];
prefix[0] = arr[0];
for (ll i = 1; i < n; i++) {
prefix[i] = prefix[i - 1] + arr[i];
}
for (ll i = 0; i < sz; i++) {
// factor by factor
ll sidelength = factors[i];
// cout<<"S:"<<sidelength<<endl;
ll y = x / sidelength;
ll sumi = 0;
ll sumj = 0;
map < ll, ll > m;
for (ll r = 0; r < n - sidelength + 1; r++) {
ll val6 = r + sidelength - 1;
if (r - 1 < 0) {
ll val7 = prefix[val6];
m[val7]++;
} else {
ll valy = prefix[val6] - prefix[r - 1];
m[valy]++;
}
}
for (ll i1 = starti; i1 < n - sidelength + 1; i1++) {
ll endi = i1 + sidelength - 1;
// cout<<"Si:"<<i1<<"Ei:"<<endi<<endl;
if (i1 - 1 < 0) {
sumi = prefix[endi];
} else {
sumi = prefix[endi] - prefix[i1 - 1];
}
ll remsum = y - sumi;
map < ll, ll > ::iterator it = m.find(remsum);
if (it != m.end()) {
ans = ans + it->second;
}
}
}
cout << ans << endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGxsIHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBsbCBuOwogICAgICAgIGxsIHg7CiAgICAgICAgY2luID4+IG4gPj4geDsKICAgICAgICBsbCBhcnJbbl07CiAgICAgICAgZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgICAgIH0KICAgICAgICB2ZWN0b3IgPCBsbCA+IGZhY3RvcnM7CiAgICAgICAgZm9yIChsbCBpID0gMTsgaSAqIGkgPD0geDsgaSsrKSB7CgogICAgICAgICAgICBpZiAoeCAlIGkgPT0gMCkgewogICAgICAgICAgICAgICAgaWYgKGkgPD0gbikgewogICAgICAgICAgICAgICAgICAgIGZhY3RvcnMucHVzaF9iYWNrKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGwgdmFsID0geCAvIGk7CiAgICAgICAgICAgICAgICBpZiAoaSAhPSB2YWwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsIDw9IG4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9ycy5wdXNoX2JhY2sodmFsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGwgc3ogPSBmYWN0b3JzLnNpemUoKTsKICAgICAgICBsbCBhbnMgPSAwOwogICAgICAgIGxsIHN0YXJ0aSA9IDA7CiAgICAgICAgbGwgc3RhcnRqID0gMDsKICAgICAgICBsbCBwcmVmaXhbbl07CiAgICAgICAgcHJlZml4WzBdID0gYXJyWzBdOwogICAgICAgIGZvciAobGwgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgcHJlZml4W2ldID0gcHJlZml4W2kgLSAxXSArIGFycltpXTsKICAgICAgICB9CiAgICAgICAgZm9yIChsbCBpID0gMDsgaSA8IHN6OyBpKyspIHsKICAgICAgICAgICAgLy8gZmFjdG9yIGJ5IGZhY3RvcgogICAgICAgICAgICBsbCBzaWRlbGVuZ3RoID0gZmFjdG9yc1tpXTsKICAgICAgICAgICAgLy8gIGNvdXQ8PCJTOiI8PHNpZGVsZW5ndGg8PGVuZGw7CiAgICAgICAgICAgIGxsIHkgPSB4IC8gc2lkZWxlbmd0aDsKICAgICAgICAgICAgbGwgc3VtaSA9IDA7CiAgICAgICAgICAgIGxsIHN1bWogPSAwOwogICAgICAgICAgICBtYXAgPCBsbCwgbGwgPiBtOwogICAgICAgICAgICBmb3IgKGxsIHIgPSAwOyByIDwgbiAtIHNpZGVsZW5ndGggKyAxOyByKyspIHsKICAgICAgICAgICAgICAgIGxsIHZhbDYgPSByICsgc2lkZWxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICBpZiAociAtIDEgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgbGwgdmFsNyA9IHByZWZpeFt2YWw2XTsKICAgICAgICAgICAgICAgICAgICBtW3ZhbDddKys7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGxsIHZhbHkgPSBwcmVmaXhbdmFsNl0gLSBwcmVmaXhbciAtIDFdOwogICAgICAgICAgICAgICAgICAgIG1bdmFseV0rKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKGxsIGkxID0gc3RhcnRpOyBpMSA8IG4gLSBzaWRlbGVuZ3RoICsgMTsgaTErKykgewogICAgICAgICAgICAgICAgbGwgZW5kaSA9IGkxICsgc2lkZWxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICAvLyAgICBjb3V0PDwiU2k6Ijw8aTE8PCJFaToiPDxlbmRpPDxlbmRsOwogICAgICAgICAgICAgICAgaWYgKGkxIC0gMSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBzdW1pID0gcHJlZml4W2VuZGldOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdW1pID0gcHJlZml4W2VuZGldIC0gcHJlZml4W2kxIC0gMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsbCByZW1zdW0gPSB5IC0gc3VtaTsKICAgICAgICAgICAgICAgIG1hcCA8IGxsLCBsbCA+IDo6aXRlcmF0b3IgaXQgPSBtLmZpbmQocmVtc3VtKTsKICAgICAgICAgICAgICAgIGlmIChpdCAhPSBtLmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgYW5zID0gYW5zICsgaXQtPnNlY29uZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICAgICAgY291dCA8PCBhbnMgPDwgZW5kbDsKCiAgICB9CgogICAgcmV0dXJuIDA7Cn0=