Cod sursa(job #1459110)

Utilizator om6gaLungu Adrian om6ga Data 9 iulie 2015 03:49:01
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

char a[1000005];
long long t[1000005];

void ciur()
{
    int i, j;
    for (i = 2; i < sqrt(1000000); i++){
        if (!a[i]){
            for (j = i*i; j <= 1000000; j += i)      
                a[j] = 1;      
        }
    }    
}


void totem()
{
    int i, j, k, e;
    t[1]=t[2]=1;
    t[3]=2;
        
    for (i = 4; i <= 1000000; i++)
    {
        if (!a[i])
            t[i] = i-1;
        else
        {
            for (j = 2; j <= sqrt(i); j++)
               if (i == (i/j)*j)
               {
                   e = 1;
                   k = i/j;
                   while (k == (k/j)*j)
                   {
                       k/=j;
                       e*=j;
                   }
                   t[i] = (j - 1)*e*t[k];
                   break;
               }
        }
    }
}

int main()
{
    int n, i;
    long long result = 1l;
    FILE *f=fopen("fractii.in","r");
    fscanf(f,"%d",&n);
 
    ciur();
    totem();
    for (i = 2; i <= n; i++)
        result += 2*t[i];
 
    FILE *out=fopen("fractii.out","w");
    fprintf(out,"%lld", result);
    return 0;
}