Cod sursa(job #889964)

Utilizator venom4u31Manea Constantin venom4u31 Data 24 februarie 2013 19:46:19
Problema Fractii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 2.92 kb
#include <stdio.h>
#include <stdlib.h>

long long int fi(int n)
{
    long long int result = n, i;
    for(i=2;i*i <= n;i++)
    {
        if (n % i == 0) result -= result / i;
        while (n % i == 0) n /= i;
    }
    if (n > 1) result -= result / n;
    return result;
}

int main()
{
    int i;
    int n, start = 0;
    long long int count;
    int starts[100] = {100000, 110000, 120000, 130000, 140000, 150000, 160000, 170000, 180000, 190000, 200000, 210000, 220000, 230000, 240000, 250000, 260000, 270000, 280000, 290000, 300000, 310000, 320000, 330000, 340000, 350000, 360000, 370000, 380000, 390000, 400000, 410000, 420000, 430000, 440000, 450000, 460000, 470000, 480000, 490000, 500000, 510000, 520000, 530000, 540000, 550000, 560000, 570000, 580000, 590000, 600000, 610000, 620000, 630000, 640000, 650000, 660000, 670000, 680000, 690000, 700000, 710000, 720000, 730000, 740000, 750000, 760000, 770000, 780000, 790000, 800000, 810000, 820000, 830000, 840000, 850000, 860000, 870000, 880000, 890000, 900000, 910000, 920000, 930000, 940000, 950000, 960000, 970000, 980000, 990000, 1000000, 0};
    long long int values[100] = {6079301507, 7355975735, 8754197331, 10273977451, 11915440063, 13678408055, 15562948247, 17569205355, 19696892535, 21946239195, 24317197835, 26809662891, 29423731287, 32159424339, 35016658583, 37995497087, 41096016235, 44317938287, 47661537927, 51126839275, 54713496967, 58421847595, 62251932047, 66203389619, 70276400759, 74471214247, 78787442103, 83225291471, 87784955879, 92465837519, 97268414619, 102192808851, 107238475131, 112405906919, 117694908135, 123105286447, 128637447559, 134291422151, 140066481695, 145963312971, 151982079351, 158121906799, 164383599911, 170767046603, 177271772471, 183898010079, 190646167727, 197515574731, 204506694419, 211619836475, 218853953443, 226209832595, 233687520819, 241286437075, 249007096691, 256849576235, 264813232619, 272898534131, 281105889855, 289434325391, 297884379079, 306456488667, 315149583043, 323964448919, 332901285131, 341959259787, 351138872851, 360440450531, 369862998495, 379407402571, 389073894447, 398861077503, 408770500927, 418801478243, 428953611667, 439227603707, 449623251955, 460140242615, 470778807655, 481539534263, 492421165575, 503424553979, 514549986615, 525796346251, 537164614175, 548654798519, 560265984243, 571998834247, 583853779039, 595829589439, 607927104783, 0};

    FILE *f, *g;

    f = fopen("fractii.in", "rt");
    fscanf(f, "%i", &n);
    fclose(f);

    count = -1;

    for(i=0;i<100;i++)
    {
        if(starts[i]==0) break;
        if(n<=starts[i+1]&&n>starts[i])
        {
            start = starts[i];
            count = values[i];
        }
    }
    //start=0;
    //count=-1;

    //TEMP

    //TEMP

    for(i=start;i<n;i++)
    {
        count+=2*fi(i+1);


    }
    g = fopen("fractii.out", "wt");
    fprintf(g, "%lli", count);
    fclose(g);
    printf("%lli", count);




    return 0;
}