Pagini recente » Borderou de evaluare (job #825535) | Borderou de evaluare (job #183764) | Borderou de evaluare (job #1008098) | Borderou de evaluare (job #1061570) | Cod sursa (job #2501156)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int nmax=1005;
vector<int>v;
vector<int>ans;
vector<int>is_obtainable;
vector<int>pas;
int aux[nmax];
bool bad[nmax],yes[nmax];
int main()
{
ifstream cin("economie.in");
ofstream cout("economie.out");
int n,valmax=-1;
cin>>n;
for(int i=1; i<=n; i++)
cin>>aux[i];
sort(aux+1,aux+n+1);
for(int i=1; i<=n; i++)
if(!bad[i])
{
valmax=max(valmax,aux[i]);
v.push_back(aux[i]);
for(int j=i+1; j<=n; j++)
if(aux[j]%aux[i]==0)
bad[j]=true;
}
ans.push_back(v[0]);
for(int i=v[0]; i<=valmax; i+=v[0])
if(!yes[i])
{
yes[i]=true;
is_obtainable.push_back(i);
}
for(int i=1; i<v.size(); i++)
{
if(yes[v[i]]==true)
continue;
pas.clear();
ans.push_back(v[i]);
pas.push_back(v[i]);
for(int j=v[i];j<=valmax;j+=v[i])
if(!yes[j])
{
yes[j]=true;
pas.push_back(j);
}
for(auto x:is_obtainable)
for(int j=x+v[i]; j<=valmax; j+=v[i])
if(!yes[j])
{
yes[j]=true;
pas.push_back(j);
}
while(!pas.empty())
{
is_obtainable.push_back(pas[pas.size()-1]);
pas.pop_back();
}
}
cout<<ans.size()<<"\n";
for(auto x:ans)
cout<<x<<"\n";
return 0;
}