Cod sursa(job #9225)

Utilizator alinaddoca alina alinad Data 27 ianuarie 2007 09:55:04
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<stdio.h>


long int n;


struct nod
{
 long int nr, fr;
 nod *urm;
};

nod *prim, *ultim;


void creare()
{
 int i;
 nod *p;
 for(i=1; i<=n; i++)
  {
   p=new nod;
   p->nr=i;
   p->fr=n-1;
   p->urm=NULL;
   if(prim==NULL)
     prim=ultim=p;
   else
    {
     ultim->urm=p;
     ultim=p;
    }
  }
 prim->fr=prim->fr+1;
}


void adunare()
{
 FILE *f=fopen("fractii.out", "w");
 long int s=0;
 nod *p;
 p=prim;
 while(p)
  {
   s=s+p->fr;
   p=p->urm;
  }
 fprintf(f, "%ld", s);
 fclose(f);
}


int cmmdc(long int a, long int b)
{
 long int r;
 while(a%b!=0)
  {
   r=a%b;
   a=b;
   b=r;
  }
 return b;
}


void lista()
{
 long int t;
 nod *p, *q;
 p=prim->urm;
 while(p)
  {
   q=p->urm;
   while(q)
    {
     t=cmmdc(p->nr, q->nr);
     if(t!=1)
      {
       p->fr=p->fr-1;
       q->fr=q->fr-1;
      }
     q=q->urm;
    }
   p=p->urm;
  }
}


int main()
{
 FILE *f=fopen("fractii.in", "r");
 fscanf(f, "%ld", &n);
 fclose(f);
 creare();
 fclose(f);
 lista();
 adunare();

 return 0;

}