Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <list>
- #include <map>
- #include <set>
- #include <queue>
- #include <deque>
- #include <stack>
- #include <bitset>
- #include <algorithm>
- #include <functional>
- #include <numeric>
- #include <utility>
- #include <sstream>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <ctime>
- #include <cctype>
- #include <cstdio>
- #include <cstring>
- #include <iostream>
- using namespace std;
- #define mp make_pair
- typedef long long ll;
- typedef pair<ll,ll> ii;
- const ll MAX =(ll) 1e18;
- int k,n;
- ll num,leastPrime,p[1100];
- ii top;
- int main(){
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin>>k>>n;
- priority_queue<ii,vector<ii>,greater<ii> > Q;
- for(int i=0;i<k;i++){
- cin>>p[i];
- Q.push(mp(p[i],p[i]));
- }
- sort(p,p+k);
- for(int i=1;i<=n;i++){
- top=Q.top(); Q.pop();
- num=top.first; // очередное число
- leastPrime=top.second; //минимальное простое число которое делит num
- for (int j=0;j<k && p[j]<=leastPrime;j++)
- if(p[j]<= MAX / num)// если результат перемножения не превышает 10^18 то заносим в кучу
- Q.push(mp(num*p[j] ,p[j]));
- else break;
- }
- cout<<num;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement