Advertisement
a53

CubPrim

a53
Oct 14th, 2021
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ULL unsigned long long int
  3. #define MAX 2642245
  4. #define Check(n) (status[n/64] & (1 << ((n % 64) / 2)))
  5. #define Set(n) (status[n/64] |= (1 << ((n % 64) / 2)))
  6. using namespace std;
  7. ifstream fin("cubprim.in");
  8. ofstream fout("cubprim.out");
  9.  
  10. int status[MAX/64 + 2];
  11. ULL cuburi[200001], nr;
  12. int n, lc, lcb=1, pz;
  13. void seive()
  14. {
  15. int limit = sqrt(MAX);
  16. for(int i = 3; i <= limit; i += 2)
  17. {
  18. if(!Check(i))
  19. {
  20. for(int j = i * i; j <= MAX; j += i + i)
  21. Set(j);
  22. }
  23. }
  24. cuburi[1]=8;
  25. for(size_t i = 3; i <= MAX; i += 2)
  26. if(!Check(i))
  27. cuburi[++lcb]=1ULL*i*i*i;
  28. }
  29. struct cubprim
  30. {
  31. ULL val;
  32. int cb, poz;
  33. };
  34.  
  35. cubprim v[200002];
  36. int CompareCubprime(cubprim a, cubprim b)
  37. {
  38. if(a.val != b.val)
  39. return a.val > b.val;
  40. return a.poz<b.poz;
  41. }
  42. int binarySearch(ULL arr[], int l, int r, ULL x)
  43. {
  44. while (l <= r)
  45. {
  46. int mi = l + (r - l) / 2;
  47. if (arr[mi] == x)
  48. return mi;
  49. if (arr[mi] < x)
  50. l = mi + 1;
  51. else
  52. r = mi - 1;
  53. }
  54. return -1;
  55. }
  56.  
  57. int main()
  58. {
  59. seive();
  60. fin>>n;
  61. for(int i=1; i<=n; ++i)
  62. {
  63. fin>>nr;
  64. if(nr>7)
  65. {
  66. pz=binarySearch(cuburi,1,lcb,nr);
  67. if(pz>0)
  68. {
  69. long double cub_root=round(pow(nr, 1.0/3.0));
  70. if(cub_root*cub_root*cub_root==nr)
  71. {
  72. ++lc;
  73. v[lc].poz=i;
  74. v[lc].val=nr;
  75. v[lc].cb=(int)cub_root;
  76. }
  77. }
  78. }
  79. }
  80. sort(v+1, v + lc +1, CompareCubprime);
  81. fout<<lc<<'\n';
  82. for(int i=1; i<=lc; ++i)
  83. fout<<v[i].poz<<" "<<v[i].cb<<" "<<v[i].val<<'\n';
  84. return 0;
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement