Cod sursa(job #1463986)

Utilizator EpictetStamatin Cristian Epictet Data 21 iulie 2015 23:12:23
Problema Sum Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>

#define DIM 8192

using namespace std;

ifstream fin ("sum.in");
ofstream fout ("sum.out");

int N, Fi[100010];
long long X;
char P[DIM + 16], *now;

void Euler_Prin_Ciur() /// Fi(n) reprezintă numărul de numere mai mici sau egale cu n și prime cu acesta;
{
    for (int i = 1; i <= 100000; i++) Fi[i] = i;
    for (int i = 2; i <= 100000; i++)
    {
        if (Fi[i] == i)
        {
            for (int j = i; j <= 100000; j += i)
            {
                Fi[j] /= i;
                Fi[j] *= (i - 1);
            }
        }
    }
}

void Verif()
{
    if (*now == '\0')
    {
        fin.get(P, DIM, '\0');
        now = P;
    }
}

int Get()
{
    while (*now < '0' || *now > '9')
    {
        now ++;
        Verif();
    }
    int number = 0;
    while (*now >= '0' && *now <= '9')
    {
        number = number * 10 + *now - '0';
        now ++;
        Verif();
    }
    return number;
}

int main()
{
    now = P;
    Verif();
    Euler_Prin_Ciur();
    N = Get();
    while (N--)
    {
        X = Get();
        fout << X * 2 * Fi[X] << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}