題意
求
思路
根據代碼YY出來的,如有不對請路過的巨巨指出
如果
然後我們可以去枚舉兩個數,統計第三個數。
找完之後分解一下當前的數即可。
代碼
class AnArray {
public:
int cnt[MAXN];
int solveProblem(vector<int> A, int K) {
LL ans = 0;
MS(cnt, 0);
for (int i = 0; i < SZ(A); i++) A[i] = __gcd(A[i], K);
for (int i = 0; i < SZ(A); i++)
{
for (int j = i+1; j < SZ(A); j++)
{
int g = __gcd((LL)A[i]*A[j], (LL)K);
ans += cnt[K/g];
}
for (int j = 1; j*j <= A[i]; j++) if (A[i] % j == 0)
{
cnt[j]++;
if (j*j != A[i]) cnt[A[i]/j]++;
}
}
return ans;
}
};