思路:
去重排序并记录每个数的个数,对于i和j对应的相同的数a, a n s + = a 的 数 量 ∗ a 的 数 量 ∗ ( a ∗ a ) 的 数 量 ans+=a的数量*a的数量*(a*a)的数量 ans+=a的数量∗a的数量∗(a∗a)的数量,对于i和j不相同的数,将上述值*2即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
ll vis[1000010];
ll b[1000010];
int main()
{
int n,cnt = 0;
cin>>n;
for(int i = 1; i <= n; i++)
{
int a;
cin>>a;
if(!vis[a])b[++cnt] = a;
vis[a]++;
}
sort(b+1,b+1+cnt);
ll ans = 0;
for(int i = 1; i <= cnt; i++)
{
for(int j = i; j <= cnt; j++)
{
if(b[i]*b[j] <= 1e6)
{
if(b[i]==b[j])
ans += vis[b[i]]*vis[b[j]]*vis[b[i]*b[j]];
else
ans += vis[b[i]]*vis[b[j]]*vis[b[i]*b[j]]*2;
}
else break;
}
}
cout<<ans<<endl;
}