Cod sursa(job #2114123)

Utilizator raduraraduIacob Radu raduraradu Data 25 ianuarie 2018 15:00:20
Problema Fractii Scor 30
Compilator cpp Status done
Runda ichb_10 Marime 0.87 kb
#include <iostream>
#include <fstream>
#define M 1000000
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
bool p[1000001];
int prime[80000];
int n;
void ciur()
{
    p[0]=1;
    p[1]=1;
    for(int i=2;i<=1000000;i++)
        if(!p[i])
        for(int j=2;i*j<=1000000;j++)p[i*j]=1;
}
int nr;
void mutprimele()
{
    nr=0;
    for(int i=1;i<=1000000;i++)if(p[i]==0)prime[++nr]=i;

}
int phi(int n)
{
    int i;
    int r=1;
    if(n==1)return 1;
    for(i=1;i<=nr&&n>1;i++)
    {
        int r1=1;
        while(n%prime[i]==0){n/=prime[i];r1*=prime[i];}
        if(r1!=1)r=r*r1/prime[i]*(prime[i]-1);
    }
    return r;
}
void sol()
{
    f>>n;
    int i;
    long long  s=0;
    for(i=1;i<=n;i++)s+=phi(i);
    s*=2;
    s--;
    g<<s;
}
int main()
{
    ciur();
    mutprimele();
    sol();
    return 0;
}