Cod sursa(job #130248)

Utilizator AndreyPAndrei Poenaru AndreyP Data 31 ianuarie 2008 18:01:07
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
#define N 1000001
char c[N];
int b[90000];
int main()
{
	int i,j,k,x,t;
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	unsigned long long f=0;
	float f1;
	c[0]=c[1]=1;
	for(i=4; i<N; i+=2)
		c[i]=1;
	for(i=3; i*i<N; i+=2)
	{
		if(!c[i])
			for(j=i+i+i; j<N; j=j+i+i)
				c[j]=1;
	}
	b[1]=2;
	k=1;
	for(i=3; i<N; i+=2)
	{
		if(!c[i])
			b[++k]=i;
	}
	scanf("%d",&x);
	for(i=2; i<=x; i++)
	{
		t=i;
		f1=i;
		for(j=1; (j<=k)&&(t!=1); j++)
		{
			if(t%b[j]==0)
			{
				f1=f1*(1-(float)1/b[j]);
				while(t%b[j]==0)
					t=t/b[j];
			}
		}
		f=f+(long)f1;
	}
	f=2*f+1;
	printf("%llu\n",f);
	return 0;
}