Advertisement
stoyan_malinin

Untitled

Sep 8th, 2021
757
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include <algorithm>
  2. #include<iostream>
  3.  
  4. using namespace std;
  5.  
  6. const int MAXN = 1e5 + 5;
  7. const int MAXA = 1e6 + 5;
  8.  
  9. int n;
  10. int a[MAXN];
  11.  
  12. vector <int> divs[MAXA];
  13.  
  14. void init()
  15. {
  16.     for(int d = 1;d<MAXA;d++)
  17.         for(int x = d;x<MAXA;x+=d)
  18.             divs[x].push_back(d);
  19. }
  20.  
  21. long long solveSlow()
  22. {
  23.     long long ans = 0;
  24.     for(int i = 0;i<n;i++)
  25.         for(int j = i+1;j<n;j++)
  26.             ans += (__gcd(a[i], a[j])==1);
  27.  
  28.     return ans;
  29. }
  30.  
  31. long long dp[MAXA];
  32. int cntDiv[MAXA];
  33.  
  34. long long solveFast()
  35. {
  36.     for(int i = 0;i<n;i++)
  37.         for(int d: divs[a[i]])
  38.             cntDiv[d]++;
  39.  
  40.     for(int d = 1;d<MAXA;d++)
  41.     {
  42.         dp[d] = (cntDiv[d]*1LL*(cntDiv[d]-1))/2;
  43.     }
  44.  
  45.     for(int d = MAXA-1;d>=1;d--)
  46.     {
  47.         for(int k = 2*d;k<MAXA;k+=d)
  48.             dp[d] -= dp[k];
  49.     }
  50.  
  51.     return dp[1];
  52. }
  53.  
  54. int main()
  55. {
  56.     init();
  57.  
  58.     cin >> n;
  59.     for(int i = 0;i<n;i++) cin >> a[i];
  60.  
  61.     cout << "SlowAns = " << solveSlow() << '\n';
  62.     cout << "FastAns = " << solveFast() << '\n';
  63. }
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement