Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #pragma GCC optimizer("O3")
- #define int long long
- const int inf = 1e5;
- int n;
- vector<int> a;
- vector<int> prime;
- vector<int> dl;
- vector<int> dl_ans;
- void read(){
- cin>>n;
- a.resize(n);
- for(int i = 0; i < n; i++){
- cin>>a[i];
- }
- }
- void fill_prime(){
- vector<bool> used(inf + 5, false);
- for(int i = 2; i < inf + 5; i++){
- if(used[i] == false){
- prime.push_back(i);
- for(int j = 2 * i; j < inf + 5; j += i){
- used[j] = true;
- }
- }
- }
- dl.assign(prime.size(), 0);
- }
- void del_add(const int & n){
- for(int i = 0; i < prime.size(); i++){
- for(int j = prime[i]; j <= n; j *= prime[i]){
- dl[i] += n / j;
- }
- }
- }
- void update_dl(int n){
- dl_ans.assign(prime.size(), 0);
- if(n == 0) return;
- for(int i = 0; i < prime.size(); i++){
- for(int j = prime[i]; j <= n; j *= prime[i]){
- dl_ans[i] += n / j;
- }
- }
- }
- void print_dl(){
- cout << "dl:\n";
- for(auto i : dl){
- cout << i << " ";
- }cout << "\n";
- }
- void print_dl_ans(){
- cout << "dl_ans:\n";
- for(auto i : dl_ans){
- cout << i << " ";
- }cout << "\n";
- }
- void print(){
- print_dl();
- print_dl_ans();
- }
- int32_t main(){
- cin.tie(0);
- cout.tie(0);
- //freopen("input.txt", "r", stdin);
- fill_prime();
- //cout<<prime.size();
- read();
- for(auto i : a){
- del_add(i);
- }
- //print();
- int l = 0, r = 1e9;
- while(r - l > 1){
- int middle = (l + r) / 2;
- update_dl(middle);
- bool flag = true;
- for(int i = 0; i < prime.size(); i++){
- if(dl[i] > dl_ans[i]){
- flag = false;
- break;
- }
- }
- //print();
- if(flag){
- r = middle;
- }else {
- l = middle;
- }
- }
- cout << r << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement