Cod sursa(job #975395)

Utilizator alexandru.huleaAlexandru Hulea alexandru.hulea Data 20 iulie 2013 01:27:31
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;	

int Putere(int x, int n)
{
	int p = 1 ;
	while (n > 0)
	{
		if (n & 1) // n este impar
		{
			p *= x;
			n-- ;
		}
		x = x * x ;
		n >>= 1 ; // sau n = n / 2
	}
	return p ;
}

int euler( int a)
{
	int i=2 ,nr,no=1;
	while ( a != 1  )
	{
		nr = 0 ;
		while ( a % i == 0 ){
						a = a / i;
						nr++;
							}
		if ( nr != 0)
		no *= (i-1)* Putere(i,nr-1);
		i++;
	}
	return no;
}

int main()
{
	FILE *fs = fopen("fractii.in","rt");
	FILE *gs = fopen("fractii.out","wt");
	if (fs == NULL) return -1;
	int nr,i,no;
	if (fscanf (fs,"%i",&nr) == 1 )
	{
		no = nr*(nr-1) + 1 ;
		if (nr <=0 ) fprintf(gs,"%i",0);
		else if ( nr == 1) fprintf (gs,"%i",1);
			else {
				for ( i =2 ; i <= nr; i++)
				{
					no = no - 2*(i-euler(i)-1); 
				}
				fprintf (gs,"%i",no);
				}
	}
	fclose(fs);
	fclose(gs);
	return 0;
}