Cod sursa(job #2074726)

Utilizator iulius510iulius alexandru iulius510 Data 24 noiembrie 2017 22:21:20
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int p[30],m;
long long S;
void factorizare(int n)
{
    int k=0;
    int i;
    if(n%2==0)
    {p[1]=2;
     k=1;
     while(n%2==0)
        n=n/2;
     for(i=3;i<=sqrt(n);i+=2)
     {
         if(n%i==0)
            p[++k]=i;
         while(n%i==0)
            n=n/i;
     }
    }
     else
     {
         for(i=3;i<=sqrt(n);i+=2)

         if(n%i==0)
              {p[++k]=i;
         while(n%i==0)
            n=n/i;
     }
     }
     if(n!=1)
     {p[1]=n;k=1;}
     m=k;


}

int main()
{   FILE *f,*g;
    f=fopen("fractii.in","r");
    g=fopen("fractii.out","w");
    int N;
    int i;
    fscanf(f,"%d",&N);
    for(i=1;i<=N;i++)
    {
        factorizare(i);
        long long c;
        c=1ll<<m;
        //printf("%d ",m);
        int j,M=0;
        long long y=0;
        while(y<c)
        {   int t=0;
            int P=1;
           for(j=1;j<=m;j++)
                if(y&(1<<(j-1)))
                {
                    P*=p[j];
                    t++;
                }
                if(t%2==0)
                    M+=N/P;
                else
                    M-=N/P;
                    printf("%d %lld %d %d\n",i,y,P,t);
                y=y+1;

        }

       S+=M;
       //printf("%lld",S);
       //printf("\n");
     //for(j=1;j<=m;j++)
        //printf("%d ",p[j]);
     //printf("\n");

    }
    fprintf(g,"%lld",S);

    return 0;
}