题意
寻找一个数组中满足 i<j 且ai*aj=i+j的个数
解析
ai*aj=i+j 可以推出 aj=(i+j)/ai ,又推出 j= k*ai-i ,
而k>2*i/ai 故 j可以从a[i]-i开始,并且自增a[i]直到找到满足条件
代码
#include<iostream>
using namespace std;
typedef long long ll;
const int T = 200000;
ll a[T];
int main()
{
int n; cin >> n; while (n--) {
ll m; cin >> m;
for (int i = 1; i <= m; i++) {
cin >> a[i];
}
ll cnt = 0;
for (ll i = 1; i <= m; i++) {
for (ll j = a[i] - i; j <= m; j += a[i]) {
//每次自加a[i]
if (i >= j) continue;
else if (a[i] * a[j] == i + j) {
cnt++;
}
}
}
cout << cnt << endl;
}
return 0;
}