Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2015
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. // TEMPLATE {{{
  6. #ifndef LOCAL
  7. #define OJ 1
  8. #else
  9. #define OJ 0
  10. #endif
  11.  
  12. #define endl '\n'
  13. #define TIMESTAMP merr << "Execution time: " << (double)clock()/CLOCKS_PER_SEC << " s.\n"
  14. class C_ {}; template <typename T> C_& operator <<(C_& __m, const T& __s) { if (!OJ) cerr << "\E[91m" << __s << "\E[0m"; return __m; }
  15. C_ merr;
  16.  
  17. struct __s { __s() { if (OJ) { ios_base::Init i; cin.sync_with_stdio(0); cin.tie(0); } } ~__s(){ TIMESTAMP; } } __S;
  18. /// END OF TEMPLATE }}}
  19.  
  20. int A[1000001];
  21. bool E[1001];
  22. int P[1001];
  23. int plen;
  24. void eratosphen() {
  25.   E[0] = E[1] = 1;
  26.   for (int i = 2; i < 1001; i++) {
  27.     if (E[i]) continue;
  28.     for (int j = 2*i; j < 1001; j+=i) {
  29.       E[j] = 1;
  30.     }
  31.     P[plen++] = i;
  32.   }
  33. }
  34.  
  35. int pp[11];
  36. int dd[11];
  37. int cnt;
  38. int xx;
  39. bool u[1000001];
  40. int ans;
  41.  
  42. inline void rec(int idx, int cur) {
  43.   if (idx == cnt) {
  44.     long long a2 = xx*1LL*xx/cur;
  45.     if (a2 <= 1000000) {
  46.       ans += (u[cur] && u[a2]);
  47.     }
  48.     return;
  49.   }
  50.   for (int i = 0; i <= dd[idx]; i++) {
  51.     rec(idx+1, cur);
  52.     if (cur*1LL*pp[idx] >= xx) return;
  53.     cur *= pp[idx];
  54.   }
  55. }
  56.  
  57. inline void go(int x) {
  58.   int nn = x;
  59.   cnt = 0;
  60.   for (int i = 0; i < plen; i++) {
  61.     int p = P[i];
  62.     if (p*p > x) break;
  63.     if (nn%p == 0) {
  64.       dd[cnt] = 2;
  65.       pp[cnt] = p;
  66.       nn/=p;
  67.       while (nn%p == 0) {
  68.         dd[cnt] += 2;
  69.         nn /= p;
  70.       }
  71.       cnt++;
  72.     }
  73.     if (nn == 1) break;
  74.   }
  75.   if (nn > 1) {
  76.     pp[cnt] = nn;
  77.     dd[cnt] = 2;
  78.     cnt++;
  79.   }
  80.   xx = x;
  81.   rec(0, 1);
  82. }
  83.  
  84. int main( void ) {
  85.   int n;
  86.   eratosphen();
  87.   cin >> n;
  88.   for (int i = 0; i < n; i++) {
  89.     cin >> A[i];
  90.     u[A[i]] = 1;
  91.   }
  92.   for (int i = 1; i < n-1; i++) {
  93.     int a = A[i];
  94.     go(a);
  95.   }
  96.   cout << ans << endl;
  97.   return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement