Cod sursa(job #1693225)

Utilizator diodio11V. Sorin diodio11 Data 22 aprilie 2016 18:15:32
Problema Fractii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#define MAX 1000000
using namespace std;
ifstream in  ("fractii.in");
ofstream out ("fractii.out");
int phi[MAX+2];
bool prime[MAX+2];

void ciur_prime (int n){
    int i, j;
    fill_n(prime,MAX-1,1);
    prime[0]=0;
    prime[1]=0;
    for (i=2; i*i <= n; i++){
        if (prime[i]){
            for (j=i; j*i <= n; j++){
                prime[i*j]=0;
            }
        }
    }
}
void totient (int n){
    int i, j;
    for (i=1; i <= n; i++) phi[i]=i;
    for (i=1; i <= n; i++){
        if (prime[i]){
            for (j=i; j <=n; j+=i){
                phi[j]-=phi[j]/i;
            }
        }
    }
}

int main (){
    int i, n;
    unsigned long s=-1;
    in >> n;
    ciur_prime(n);
    totient(n);
    for (i=1; i <= n ; i++){
        s=s + phi[i]*2;
    }
    out << s;
return 0;
}

/*spooky long shit
int gcd (int n, int m){
    for (unsigned r=m%n; r ; m=n, n=r, r=m%n);
return n;
}
int main()
{
    int j, n, i, t=-1;
    in >> n;
    for (i=1; i <=n; i++){
        for (j=i; j <=n; j++)
            if (gcd(i,j) == 1) t+=2;
    }
    cout << t;
return 0;
}
*/