Cod sursa(job #2074739)

Utilizator iulius510iulius alexandru iulius510 Data 24 noiembrie 2017 23:08:31
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.43 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;
    int aux=n;
    if(n%2==0)
    {
        p[1]=2;
        k=1;
        while(n%2==0)
            n=n/2;
        for(i=3; n>1; i+=2)
        {
            if(n%i==0)
                p[++k]=i;
            while(n%i==0)
                n=n/i;
        }
    }
    else
    {
        for(i=3; n>1; 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 cmmdc(int a,int b)
{
    int r;
    r=b%a;
    while(r)
    {
        b=a;
        a=r;
        r=b%a;


    }
    return a;


}


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);
        int j,P=i,c=0;
        for(j=1; j<=m; j++)
            P=(P/p[j])*(p[j]-1);
        S+=(N/i)*P;
        for(j=1; j<=N%i; j++)
            if(cmmdc(j,N)==1)
                c++;
        S+=c;

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

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

    return 0;
}