Cod sursa(job #83344)

Utilizator MarquiseMarquise Marquise Data 10 septembrie 2007 20:52:07
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>
#include<math.h>

#define NMAX 1000
int  p[]={2, 3 ,5 ,7 ,11 ,13 ,17 ,19 ,23 ,29 ,31 ,37 ,41 ,43 ,47 ,53 ,59 ,61 ,67 ,71 ,73 ,79 ,83 ,89 ,97 ,101 ,103 ,107 ,109 ,113 ,127 ,131 ,137 ,139 ,149 ,151 ,157 ,163 ,167 ,173 ,179 ,181 ,191 ,193 ,197 ,199 ,211 ,223 ,227 ,229 ,233 ,239 ,241 ,251 ,257 ,263 ,269 ,271 ,277 ,281 ,283 ,293 ,307 ,311 ,313 ,317 ,331 ,337 ,347 ,349 ,353 ,359 ,367 ,373 ,379 ,383 ,389 ,397 ,401 ,409 ,419 ,421 ,431 ,433 ,439 ,443 ,449 ,457 ,461 ,463 ,467 ,479 ,487 ,491 ,499 ,503 ,509 ,521 ,523 ,541 ,547 ,557 ,563 ,569 ,571 ,577 ,587 ,593 ,599 ,601 ,607 ,613 ,617 ,619 ,631 ,641 ,643 ,647 ,653 ,659 ,661 ,673 ,677 ,683 ,691 ,701 ,709 ,719 ,727 ,733 ,739 ,743 ,751 ,757 ,761 ,769 ,773 ,787 ,797 ,809 ,811 ,821 ,823 ,827 ,829 ,839 ,853 ,857 ,859 ,863 ,877 ,881 ,883 ,887 ,907 ,911 ,919 ,929 ,937 ,941 ,947 ,953 ,967 ,971 ,977 ,983 ,991 ,997 };
int num = 1;
long n, nr;
long long fr = 1;


int main()
{
	long i, ci, j, lim;
	long phi;
	freopen("fractii.in", "r", stdin);
	freopen("fractii.out", "w", stdout);
	scanf("%ld", &n);
	for ( i = 2; i <= n; i++)
	{
		ci = i;
		phi = i;
		lim = sqrt(ci);
		for ( j = 0; p[j] <= lim && ci > 1; j++)
		{
			if ( ci % p[j] ==0)
			{
				phi = phi / p[j] * ( p[j] - 1);
				while ( ci >1 && ci % p[j] == 0)
					ci /= p[j];
			}
		}
		if ( ci >1)
			phi = phi / ci * (ci - 1);

		fr += 2 * phi;
	}
	printf("%lld", fr);
	return 0;
}