Cod sursa(job #1484068)

Utilizator CalinSpiridonSpiridon Calin CalinSpiridon Data 10 septembrie 2015 14:14:24
Problema Fractii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <bitset>

using namespace std;

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

int n, ct, ok, nr;
long long sum;
int p[200], f[30];
bitset <1010> prim;

void ciur(){
    p[++ct]=2;
    for(int i=3;i<=1005;i+=2){
        if(!prim[i]){
            p[++ct]=i;
            for(int j=i*i;j<=1005;j+=i+i) prim[j]=1;
        }
    }
}

int phi(int k){
    int u=k;
    ok=1;
    nr=0;
    for(int i=1;i<=ct && ok;++i){
            if(k%p[i]==0){
                f[++nr]=p[i];
                while(k%p[i]==0) k/=p[i];
            }
            if(k==1) ok=0;
    }
    if(k>1) f[++nr]=k;
    for(int i=1;i<=nr;++i){
        u/=f[i];
        u*=(f[i]-1);
    }
    return u;
}

int main(){
    fin>>n;
    ciur();
    for(int i=2;i<=n;++i){
        sum+=phi(i);
    }
    sum*=2;
    ++sum;
    fout<<sum;



    return 0;
}