Pagini recente » Cod sursa (job #1451465) | Cod sursa (job #2344006) | Cod sursa (job #1740857) | Cod sursa (job #1573706) | Cod sursa (job #236539)
Cod sursa(job #236539)
#include <stdio.h>
int a[1005],sol[1005];
int s[50005];
int n,m;
void solve ()
{
int i,j,k;
s[0]=1;
for (i=1; i<=n; ++i)
if (!s[a[i]])
{
sol[++m]=a[i];
for (j=a[n]+1; j>=0; --j)
if (s[j])
s[j+a[i]]=1;
for (j=1; j<=a[n]+1; ++j)
if (s[j]==1)
for (k=2*j; k<=a[n]+1; k+=j)
s[k]=2;
}
printf ("%d\n",m);
for (i=1; i<=m; ++i)
printf ("%d\n",sol[i]);
}
int divide (int p,int q)
{
int st,dr,x;
st=p;
dr=q;
x=a[p];
while (st<dr)
{
while (st<dr && a[dr]>=x)
--dr;
a[st]=a[dr];
while (st<dr && a[st]<=x)
++st;
a[dr]=a[st];
a[st]=x;
}
return st;
}
void qsort (int p, int q)
{
int m;
m=divide (p,q);
if (m-1>p)
qsort (p,m-1);
if (m+1<q)
qsort (m+1,q);
}
int main ()
{
freopen ("economie.in","r",stdin);
freopen ("economie.out","w",stdout);
int i;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
scanf ("%d",&a[i]);
qsort (1,n);
solve ();
return 0;
}