Cod sursa(job #235643)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 24 decembrie 2008 20:17:34
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<iostream>
#include<stdio.h>
FILE *f=fopen("economie.in","r"),*g=fopen("economie.out","w");
short v[50000];long a[1001],max;
int divide(int st,int dr)
{
 int aux=a[st];
 while(st<dr)
 {
  while(st<dr&&a[dr]>aux)
   dr--;
  a[st]=a[dr];
  while(st<dr&&a[st]<aux)
   st++;
  a[dr]=a[st];
 }
a[st]=aux;
return st;
}
void qsort(int st,int dr)
{
 int m=divide(st,dr);
 if(m-1>st) divide(st,m-1);
 if(m+1<dr) divide(m+1,dr);
}
int main()
{
 int i,j,n;long i1,min=0,s=0;
 fscanf(f,"%d",&n);
 for(i=1;i<=n;i++)
 {
  fscanf(f,"%ld",&a[i]); max=max>a[i]?max:a[i];
 }
 qsort(1,n);
 for(i=1;i<=n;i++)
 {
  s+=a[i];
 if(!a[i])
  v[i]=2,min++;
  for(i1=a[i]*2;i1<=max+1;i1+=a[i])
   if(!v[i1]) v[i1]=1;
  for(i1=s;i1<=max+1;i1+=s)
   if(!v[i1]) v[i1]=1;
 }
 fprintf(g,"%ld\n",min);
 for(i1=1;i1<=max+1;i1++)
  if(v[i1]==2)
   fprintf(g,"%ld\n",a[i]);
return 0;
}