Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2015
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <string>
  6. #include <vector>
  7. #include <stack>
  8. #include <queue>
  9. #include <set>
  10. #include <cstring>
  11. #include <cstdlib>
  12. #include <map>
  13. #define f first
  14. #define s second
  15. #define ll long long
  16. #define ull unsigned long long
  17. #define mk make_pair
  18. #define pb push_back
  19. #define vi vector <int>
  20. #define pii pair<int , int>
  21. using namespace std;
  22. const int N = int(1e6) + 100;
  23. int a[N],lp[N],n;
  24. vector <pii > v[N];
  25. bool u[N];
  26. int m,p,x,cn,q[20],d[20];
  27. ll t,pq;
  28. ll ans = 0;
  29.  
  30. void rec(int p,ll s){
  31. if(s > x) return;
  32. if(p == cn + 1){
  33. if(s == x) return;
  34. pq = t / s;
  35. if(pq > N - 1) return;
  36. if(u[s] && u[pq]) ans++;
  37. return;
  38. }
  39. ll res = 1;
  40. for(int i=0;i<=d[p];i++){
  41. if(res * s > x) return;
  42. rec(p+1,s * res);
  43. res = res * q[p];
  44. }
  45. }
  46.  
  47. int main () {
  48. for(int i=2;i<=N;i+=2) lp[i] = 2;
  49. int K = int(sqrt( N + 1));
  50. for(int i=3;i<=K;i+=2) if(!lp[i]){
  51. for(int j=i*i;j<=N;j+=(i+i)){
  52. if(!lp[j]) lp[j] = i;
  53. }
  54. }
  55. for(int i=3;i<=N;i+=2) if(!lp[i]){
  56. lp[i] = i;
  57. }
  58. for(int i=2;i<=N;i++){
  59. m = i;
  60. p = lp[i];
  61. x = 0;
  62. while(m % p == 0){
  63. m /= p;
  64. x++;
  65. }
  66. v[i].pb(mk(p,x));
  67. for(int j=0;j<v[m].size();j++){
  68. v[i].pb(v[m][j]);
  69. }
  70. }
  71. scanf("%d",&n);
  72. for(int i=1;i<=n;i++){
  73. scanf("%d",&a[i]);
  74. u[a[i]] = 1;
  75. }
  76. for(int i=2;i<=n;i++){
  77. x = a[i];
  78. cn = 0;
  79. reverse(v[x].begin(),v[x].end());
  80. for(int j=0;j<v[x].size();j++){
  81. q[++cn] = v[x][j].f;
  82. d[cn] = 2*v[x][j].s;
  83. }
  84. t = 1ll*x*x;
  85. rec(1,1);
  86. }
  87. cout << ans;
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement