Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
  6. #define FORD(i,a,b) for(int i = (a); i >= (b); --i)
  7. #define RI(i,n) FOR(i,1,(n))
  8. #define REP(i,n) FOR(i,0,(n)-1)
  9. #define mini(a,b) a=min(a,b)
  10. #define maxi(a,b) a=max(a,b)
  11. #define mp make_pair
  12. #define pb push_back
  13. #define st first
  14. #define nd second
  15. #define sz(w) (int) w.size()
  16. typedef vector<int> vi;
  17. typedef long long ll;
  18. typedef long double ld;
  19. typedef pair<int,int> pii;
  20. typedef pair<pii, int> para;
  21. const int inf = 1e9 + 7;
  22. const int maxN = 5e6 + 5;
  23.  
  24. int n;
  25. map<ll, int> freq;
  26. int ans;
  27.  
  28. bool isSquare(ll x, ll y) {
  29. return x * x == y;
  30. }
  31.  
  32. int main() {
  33. ios_base::sync_with_stdio(0);
  34. cin >> n;
  35. for (int i = 0; i < n; i++) {
  36. ll a;
  37. cin >> a;
  38. freq[a]++;
  39. }
  40.  
  41. // wykladniki > 3
  42. for(ll i = 2; i <= (ll)1e6; i++) {
  43. ll x = i * i * i;
  44. long double d = x;
  45. // potrzebujemy long double bo ll moze sie przekrecic :P
  46. while (d <= 1e18) {
  47. if (freq.find(x) != freq.end()) {
  48. ans += freq[x];
  49. freq.erase(x);
  50. }
  51. d *= (long double)i;
  52. x *= i;
  53. }
  54. }
  55.  
  56. // wykladnik = 2
  57. for (auto k: freq) {
  58. ll p = (ll)sqrt(k.st);
  59. if (isSquare(p, k.st) || isSquare(p + 1, k.st)) {
  60. ans += k.nd;
  61. }
  62. }
  63. cout << ans << endl;
  64. return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement