fork(2) download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 1e6 + 10;
  6.  
  7. int n, a[MAXN];
  8. int cnt[MAXN], s[MAXN], used[MAXN];
  9. vector <int> v[MAXN];
  10.  
  11. int main() {
  12. for (int i = 2; i < MAXN; ++i) {
  13. if(s[i] == 0) {
  14. for (int j = i; j < MAXN; j += i) {
  15. s[j] += i;
  16. }
  17. }
  18. }
  19. for (int j = 2; j < MAXN; ++j) {
  20. for (int i = 2 * j; i < MAXN; i += j) {
  21. if(s[i] % s[j] == 0) {
  22. v[i].push_back(j);
  23. }
  24. }
  25. }
  26. int t;
  27. scanf("%d", &t);
  28. while (t--) {
  29. scanf("%d", &n);
  30. for (int i = 1; i <= n; ++i) {
  31. scanf("%d", &a[i]);
  32. cnt[a[i]]++;
  33. }
  34. long long ans = 0;
  35. for (int i = 1; i <= n; i++) {
  36. if(!used[a[i]]) {
  37. ans += 1ll * cnt[a[i]] * (cnt[a[i]] - 1);
  38. for (auto j : v[a[i]]) {
  39. ans += 1ll * cnt[a[i]] * cnt[j];
  40. }
  41. used[a[i]]=1;
  42. }
  43. }
  44. for(int i = 1; i <= n; i++) {
  45. used[a[i]] = 0;
  46. cnt[a[i]] = 0;
  47. }
  48. printf("%lld\n", ans);
  49. }
  50. }
Success #stdin #stdout 0.3s 52628KB
stdin
1
5
2 30 2 4 3
stdout
6