Pagini recente » Monitorul de evaluare | Cod sursa (job #1005093) | Cod sursa (job #389635) | Cod sursa (job #1776442) | Cod sursa (job #179614)
Cod sursa(job #179614)
#include <stdio.h>
FILE *f,*g;
unsigned int a[1005],n,i,b[1005],max;
char c[50008];
unsigned int divide(unsigned int ls,unsigned int ld)
{
unsigned int s=ls,d=ld,aux;
aux=a[ls];
while(s<d)
{
while((s<d)&&(a[d]>aux))d--;
a[s]=a[d];
while((s<d)&&(a[s]<=aux))s++;
a[d]=a[s];
}
a[s]=aux;
return s;
}
void quick(unsigned int ls, unsigned int ld)
{
unsigned int k;
if(ls<ld)
{
k=divide(ls,ld);
quick(ls,k-1);
quick(k+1,ld);
}
}
int verifica(void)
{
int i;
for(i=1;i<=n;i++)
if(c[a[i]]==0)
return 0;
return 1;
}
void genereaza(void)
{
unsigned int i;
for(i=a[1];i<=max;i+=a[1])
c[i]=1;
}
void actualizeaza(unsigned int pas)
{
unsigned int i,j;
a[pas]=1;
for(i=1;i<=max;i++)
if(c[i]==1)
c[i+pas]=1;
}
void afiseaza(void)
{
unsigned int i;
fprintf(g,"%d\n",b[0]);
for(i=1;i<=b[0];i++)
fprintf(g,"%d\n",b[i]);
}
int main()
{
f=fopen("economie.in","r");
g=fopen("econimie.out","w");
fscanf(f,"%d\n",&n);
for(i=1;i<=n;i++) fscanf(f,"%d\n",&a[i]);
quick(1,n);
b[0]++;
b[b[0]]=a[1];
i=2;
max=a[n];
genereaza();
while(i<=n)
{
if(c[a[i]]!=1)
{
b[0]++;
b[b[0]]=a[i];
actualizeaza(a[i]);
}
i++;
}
afiseaza();
fclose(f); fclose(g);
return 0;
}