Cod sursa(job #140450)

Utilizator nimeniaPaul Grigoras nimenia Data 21 februarie 2008 21:11:58
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream.h>
#include <math.h>

ifstream f("fractii.in");
ofstream g("fractii.out");

long long prod,i,p,s,n,j,k,n_aux;

char prime[1000010];
long long phi[1000010];
long nmax=20;
int gasit;

int main(){
    phi[1]=1;
    f>>n;
	for(j=0;j<=n;j++)prime[j]='0';
	prime[n+1]='\0';
	for (j=2;j<=n;j++)
            if (prime[j]=='0'){
                k=1;
				while(j*k<=n){
                    prime[j*(++k)]='1';
                }
            }

    for (i=2;i<=n;i++)
	{     prod=1;gasit=0;
        if (prime[i]=='0')prod*=(i-1);
		else
			{for(j=2;j<=i/2 &&!gasit;j++){

				if (prime[j]=='0' && i%j==0){
					p=0;gasit=1;
					n_aux=i;
					while (!(n_aux%j)){
					n_aux/=j;p++;
					}
				if(p)prod*=(j-1)*pow(j,p-1)*phi[n_aux];

            }

        }}
        phi[i]=prod;

    }
/*    for (i=0;i<n;i++)
        g<<phi[i]<<endl;*/

	for (i=1;i<=n;i++)
		s+=phi[i]*2;
		s--;
    g<<s;
    f.close();
    g.close();
    return 0;
}