Cod sursa(job #518211)

Utilizator blastoiseZ.Z.Daniel blastoise Data 30 decembrie 2010 19:01:14
Problema Fractii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>

long long N,sol,x,n;
long i,j,nr,v[1000010];
char p[1002];

int main()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);

	scanf("%lld",&N);

	for(i=1;(((i*i)<<2)+(i<<2)+1)<=N;i++)
		if((p[i>>3]&(1<<(i&7)))==0)
			for(j=(((i*i)<<1)+(i<<1));((j<<1)+1)<=N;j+=((i<<1)+1))
				p[j>>3]|=(1<<(j&7));

	for(i=1;i<=N;i++) v[i]=i;

	for(j=2;j<=N;j+=2) v[j]/=2;

	for(i=1;((i<<1)+1)<=N;i++)
		if((p[i>>3]&(1<<(i&7)))==0)
		{
			x=i*2+1;
			for(j=x;j<=N;j+=x)
			{
				v[j]/=x;
				v[j]*=(x-1);
			}
		}
			
	sol=0;
	for(i=2;i<=N;i++)
		sol+=v[i];

	printf("%lld\n",2*sol+1);
	return 0;
}