Cod sursa(job #203207)

Utilizator savimSerban Andrei Stan savim Data 14 august 2008 16:43:59
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <math.h>
#define maxl 100010

int i,j,n,m,k,cop,v,sol=0,nr;
int ciur[maxl];
int divi[1010];

int main()
{
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    
    scanf("%d",&n);
    for (i=1; i<=n; i++)
    {
        cop=i;m=0;
        if (cop%2==0)
        {
            divi[++m]=2;
            while (!(cop%2)) cop/=2;
        }
        while (cop>1)
        {
              k=(int)sqrt(cop);v=cop;
              for (j=3; j<=k; j++)
                  if (cop%j==0) 
                  {
                     divi[++m]=j;
                     while (!(cop%j)) cop/=j;
                  }
              if (cop==v && cop!=2)
              {
                 divi[++m]=cop;
                 cop=1;           
              }
        }        
        
        nr=0;
        for (j=1; j<=m; j++)
        {
            for (k=1; k*divi[j]<=n; k++)
                if (ciur[k*divi[j]]!=i)
                {
                   nr++;
                   ciur[k*divi[j]]=i;
                }
        }
        sol+=n-nr;
    }
    printf("%d\n",sol);               
        
    return 0;    
}