Cod sursa(job #396004)

Utilizator bugyBogdan Vlad bugy Data 14 februarie 2010 12:22:23
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<stdio.h>
using namespace std;
#define dim 1000001
#include<math.h>

int n,p[dim],i,j,nr,N,P,v[dim];
long long nrf;

void descompune()
{j=1; nr=0;
while(N>1)
{j++; 
	while(N%j==0)
		{N/=j; 
		if(p[j]==0)
			nr++;
		p[j]++; }

}


}

int main ()
{
 FILE *f=fopen("fractii.in","r"), *g=fopen("fractii.out","w");
	
    fscanf(f,"%d",&n);
for(i=3;i<=n;i+=2)
	if(v[i]==0)
		for(j=2;i*j<=n;j++)
			v[i*j]=1;
	
	
	
nrf=1;
for(i=3;i<=n;i++)
{N=i;P=1;
if(v[i]==0&&i%2!=0)
	P=i-1;
	else
	{
	descompune();
	for(j=2;j<=i;j++)
	{	if(p[j]!=0)
			{
				P*=(j-1)*(long long)pow(j,p[j]-1);
				nr--;
				p[j]=0;
				
			}
		if(nr==0)
			break;
	}
	}
nrf+=P;

}	


	fprintf(g,"%lld",2*nrf+1);
	
fclose(f);
fclose(g);	
return 0;
}