Cod sursa(job #140535)

Utilizator nimeniaPaul Grigoras nimenia Data 21 februarie 2008 22:40:28
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream.h>
#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 phi[1000010];
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+1)<=n){
                    prime[j*(++k)]='1';
                }
            }

    for (i=2;i<=n;i++)
	{     prod=1;gasit=0;
        if (prime[i]=='0')phi[i]=(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++;
					}
				    phi[i]=(j-1)*phi[n_aux]*(i/n_aux)/j;
                }
        }}
    }
    for (i=1;i<=n;i++)
		s+=phi[i]*2;

		s--;
    g<<s;
    f.close();
    g.close();
    return 0;
}