Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #pragma GCC optimizer("O3")
  5. #define int long long
  6.  
  7. const int inf = 1e5;
  8. int n;
  9. vector<int> a;
  10. vector<int> prime;
  11. vector<int> dl;
  12. vector<int> dl_ans;
  13.  
  14. void read(){
  15. cin>>n;
  16. a.resize(n);
  17. for(int i = 0; i < n; i++){
  18. cin>>a[i];
  19. }
  20. }
  21.  
  22. void fill_prime(){
  23. vector<bool> used(inf + 5, false);
  24. for(int i = 2; i < inf + 5; i++){
  25. if(used[i] == false){
  26. prime.push_back(i);
  27. for(int j = 2 * i; j < inf + 5; j += i){
  28. used[j] = true;
  29. }
  30. }
  31. }
  32. dl.assign(prime.size(), 0);
  33. }
  34.  
  35. void del_add(const int & n){
  36. for(int i = 0; i < prime.size(); i++){
  37. for(int j = prime[i]; j <= n; j *= prime[i]){
  38. dl[i] += n / j;
  39. }
  40. }
  41. }
  42.  
  43. void update_dl(int n){
  44. dl_ans.assign(prime.size(), 0);
  45. if(n == 0) return;
  46. for(int i = 0; i < prime.size(); i++){
  47. for(int j = prime[i]; j <= n; j *= prime[i]){
  48. dl_ans[i] += n / j;
  49. }
  50. }
  51. }
  52.  
  53. void print_dl(){
  54. cout << "dl:\n";
  55. for(auto i : dl){
  56. cout << i << " ";
  57. }cout << "\n";
  58. }
  59.  
  60. void print_dl_ans(){
  61. cout << "dl_ans:\n";
  62. for(auto i : dl_ans){
  63. cout << i << " ";
  64. }cout << "\n";
  65. }
  66.  
  67. void print(){
  68. print_dl();
  69. print_dl_ans();
  70. }
  71.  
  72. int32_t main(){
  73. cin.tie(0);
  74. cout.tie(0);
  75.  
  76. //freopen("input.txt", "r", stdin);
  77. fill_prime();
  78. //cout<<prime.size();
  79. read();
  80.  
  81. for(auto i : a){
  82. del_add(i);
  83. }
  84.  
  85. //print();
  86.  
  87. int l = 0, r = 1e9;
  88. while(r - l > 1){
  89. int middle = (l + r) / 2;
  90. update_dl(middle);
  91. bool flag = true;
  92. for(int i = 0; i < prime.size(); i++){
  93. if(dl[i] > dl_ans[i]){
  94. flag = false;
  95. break;
  96. }
  97. }
  98.  
  99. //print();
  100.  
  101. if(flag){
  102. r = middle;
  103. }else {
  104. l = middle;
  105. }
  106. }
  107.  
  108. cout << r << "\n";
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement