#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 2;
unordered_set<int> primes;
vector<int> ordered_primes;
unordered_map<int, int> bit[N];
void sieve(int n) {
vector<bool> isPrime(n + 1, true);
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primes.insert(i);
ordered_primes.push_back(i);
}
}
}
int query(int i, int val) {
int ret = 0;
for (int j = i; j >= 1; j -= j & -j) {
if (bit[j].find(val) != bit[j].end()) {
ret += bit[j][val];
}
}
return ret;
}
// how many to the left of i is equal to val * another prime
int query2(int i, int val) {
int ret = 0;
for (int j = i; j >= 1; j -= j & -j) {
for (auto it = bit[j].begin(); it != bit[j].end(); it++) {
int key = (*it).first;
if (key % val == 0 && primes.find(key / val) != primes.end()) {
ret += bit[j][key];
}
}
}
return ret;
}
void solve() {
// cout << "---"<<endl;
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++) {
bit[i].clear();
}
for (int i = 1; i <= n; i++) {
cin >> a[i];
for (int j = i; j <= n; j += j & -j) {
bit[j][a[i]]++;
}
}
vector<int> suffix(n + 2, 0);
for (int i = n; i >= 1; i--) {
suffix[i] = suffix[i + 1];
if (primes.find(a[i]) != primes.end()) {
suffix[i] += 1;
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
// if a[i] is not a prime
if (primes.find(a[i]) == primes.end()) {
// check if a[i] is a product of two primes
int p1 = 0, p2 = 0;
for (int j = 0; j < ordered_primes.size(); j++) {
if (ordered_primes[j] * ordered_primes[j] > a[i]) break;
if (a[i] % ordered_primes[j] == 0 &&
primes.find(a[i] / ordered_primes[j]) != primes.end()) {
// cout << "[i: " << i << "] is a product of 2 primes" << endl;
ans++;
p1 = ordered_primes[j];
p2 = a[i] / ordered_primes[j];
break;
}
}
if (p1) {
ans += query(n, p1) - query(i, p1);
if (p1 != p2) ans += query(n, p2) - query(i, p2);
ans += query(n, a[i]) - query(i, a[i]);
}
continue;
}
// primes to the right of i
int suff = suffix[i + 1];
ans += suff;
// minus the duplicates primes to the right of i
int b = query(n, a[i]) - query(i, a[i]);
ans -= b;
// add composite numbers to the right of i where a[j] = a[i] * another prime
int c = query2(n, a[i]) - query2(i, a[i]);
ans += c;
// cout << "[i: " << i << "] " << "suff: " << suff << ", b: " << b << ", c: " << c << endl;
}
cout << ans << endl;
}
int main() {
sieve(N);
int t;
cin >> t;
while (t--) solve();
}