Cod sursa(job #117806)

Utilizator savimSerban Andrei Stan savim Data 22 decembrie 2007 12:57:13
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
int main()
{
	int m,i,j,k,n;
	int a[1001],b[1001],c[1001];

	freopen("economie.in","r",stdin);
	freopen("economie.out","w",stdout);

	scanf("%d",&n);
	for (i=1; i<=n; i++)
		scanf("%d",&a[i]);

	for (i=1; i<=n-1; i++)
		for (j=i+1; j<=n; j++)
		if (a[i]>a[j])
		{
			k=a[i];
			a[i]=a[j];
			a[j]=k;
		}
	
    m=1;b[m]=a[1];c[m]=a[1];
	for (i=2; i<=n; i++)
	{
		int gas=0;
		for (j=1; j<=m; j++)
			if (a[i]%b[j]==0)
			{
				gas=1;
				break;
			}
		if (!gas)
		{
			m++;
			b[m]=a[i];
			c[m]=a[i];
		}
	}

    for (i=1; i<=m-1; i++)
        for (j=i+1; j<=m; j++)
        {
			k=b[i]+b[j];
            int aa=1;
            for (aa=1; aa<=b[m]/k; aa++)
            {
               k*=aa;
			   int gas=0,p=1,q=j,poz=1;
			   if (b[1]==k){ gas=1;poz=1;}
			   if (b[m]==k){ gas=1;poz=m;}
			   while (p+1<q)
			   {
					 int r=(p+q)/2;
					 if (b[r]==k) { gas=1;poz=r;}
					 if (b[r]<k) p=r;
					 else q=r;
					 if (gas) break;
			   }
			   if (gas) c[poz]=0;
			}
        }
   	
   	int nr=0;
    for (i=1; i<=m; i++)
   	if (c[i]!=0) nr++;

    printf("%d\n",nr);
	for (i=1; i<=m; i++)
	    if (c[i]!=0) printf("%d\n",c[i]);

	return 0;
}