Cod sursa(job #533206)

Utilizator SadmannCornigeanu Calin Sadmann Data 13 februarie 2011 15:03:20
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#include<vector>

int cmmdc(int a,int b)
{
    while(b)
    {
        int r=a%b;
        a=b;
        b=r;
    }
    return a;
}

using namespace std;
FILE *in,*out;
int N,cntprim,i,j,nr,prim[50000],poz;
double euler;
bool primviz[1000001];  //cele cu false sunt prime
int main()
{
    in=fopen("fractii.in","rt");
    out=fopen("fractii.out","wt");
    fscanf(in,"%d",&N);
	euler=1;
	prim[1]=2;
	cntprim=1;
	for(i=3;i<=N;i+=2)
	{
		if(!primviz[i])
		{
			for(j=i<<1;j<=N;j+=i)
				primviz[j]=true;
			prim[++cntprim]=i;
		}
	}
    for(i=2;i<=N;i++)
    {
		nr=i;
		poz=1;
		double prod=i;
		while(nr>1)
		{
			bool putere=false;
			if( !(nr%prim[poz]) )
			{
				putere=true;
				int cat=nr/prim[poz];
				nr-=cat*prim[poz];
			}
			if(putere)
				prod*=(1-(double)1/prim[poz]);
			poz++;
		}
		euler+=2*prod;
    }
	fprintf(out,"%.0lf",euler);
	
    return 0;
}